【发布时间】:2011-08-24 20:55:03
【问题描述】:
我想概括调用 NSLog 并避免在完成调试时注释掉调用。
我有:
#define USE_ADLog 0
#define USE_RPLog 0
#define USE_DLLog 1
void ConsoleADLog(NSString *message, ...);
void ConsoleRPLog(NSString *message, ...);
void ConsoleDLLog(NSString *message, ...);
例如:
void ConsoleADLog(NSString *message, ...) {
#if (USE_ADLog)
va_list optionalArgs;
va_start(optionalArgs, message); // after the parm = message
va_end(optionalArgs);
NSLog(message, optionalArgs);
#endif
}
到目前为止,一切都很好......但是,例如,只要我打电话:
ConsoleDLLog(@"parm1 = %@, parm2 = %@", parm1, parm2);
哪个调用在辅助线程中,我炸了。我想?? va_start、va_end 是线程安全的。
...还是问题 %@...我知道 %f 有效???
显然不是!,那么我如何让它们线程安全...普通 ole
NSLog(@"whatever %@", whateverParm)
有效,但不是上面的功能。
谢谢,
【问题讨论】:
-
有几件事我不明白。为什么在使用它之前在 va_end 中释放 optionalArgs ?你不应该用
msg = [[[NSString alloc] initWithFormat:message arguments:optionalArgs] autorelease]; va_end(optionalArgs);之类的东西保存它,然后用NSLog 来保存味精吗?你真的想要 ASL 的 NSLog 吗?你可以改用 fprintf。
标签: iphone objective-c cocoa macos nslog