2012-10-05 5 views
2

NSLog를 래핑하는 예제를 보았지만 자세한 내용은 100 % 확실하지 않습니다.NSLog 래퍼

#define debugLog(fmt,...) NSLog(@"%@",[NSString stringWithFormat:(fmt), ##__VA_ARGS__]);

정확히 여기에 논쟁이 있습니까? 내가 정의 # 매크로이를 만들 얼마나

- (void) logMessage:(NSString *) message ofType:(NSString *) type 
{ 

    NSLog(@"%@ - %@", type, message); 
} 

와 같은 로그에 상수 문자열을 추가하고 싶다면

?

답변

4

은 가변 인수 매크로 (가변 개수의 인수를 사용하는 매크로)입니다. 특정 매크로는 두 개의 인수를 갖는 NSLog을 호출합니다. 첫번째는 형식 문자열 (@"%@")이고 두 번째는 전달 된 형식 문자열과 매크로의 가변 인수를 취하는 stringWithFormat에 의해 반환되는 자동 반복 문자열입니다.

__VA_ARGS__은 매크로 내에서 가변 인수 목록을 참조하는 방법입니다. 매개 변수 목록의 ...에 해당합니다. 대신 당신의 logMessage 방법의

, 당신은 동일한 결과를 달성하기 위해 debugLog 매크로를 사용할 수 있습니다 : 그것은 단지 다른 것을 추가하지 않고 NSLog 포장되어 있기 때문에

debugLog("%@ - %@", type, message); 

매크로 자체는하지만 무의미한 조금 보인다. 당신이 logMessage에 직접 해당하는 매크로를 원하는 경우

, 당신은 모든 가변 인수 목록을 처리 할 필요가 없습니다 : 당신은해야합니다

#define logMessageAsMacro(message, type) NSLog(@"%@ - %@", message, type) 

가 인수 여부 모두에 대해 조심해야 매크로는 유형이 안전하지 않으므로 NSString입니다.

+0

감사합니다. 위의 logMessage 메소드를 매크로에 작성하는 방법을 제안 할 수 있습니까? – jarryd

+0

고마워요. 이걸 접두사 파일에 정의합니까? – jarryd

+0

프로젝트에서 논리적으로 생각하는 곳이면 어디에서나 정의 할 수 있습니다. –