我打算推廣調用NSLog,並避免在完成調試時註釋掉調用。推廣到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)
作品,但上面沒有的功能。
感謝,
檢查此主題: http://stackoverflow.com/questions/969130/nslog-tips-and-tricks –
我不明白的幾件事。爲什麼在使用前在va_end中釋放optionalArgs?不應該用'msg = [[[NSString alloc] initWithFormat:消息參數:optionalArgs] autorelease]來保存它。 va_end(optionalArgs);'然後NSLog的味精?你真的想要NSLog的ASL?你可以使用fprintf來代替。 – Jano