обобщить вызов NSLog - PullRequest
       20

обобщить вызов NSLog

0 голосов
/ 25 августа 2011

Я пытаюсь обобщить вызовы 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)

работает, но не с функцией выше.

Спасибо,

Ответы [ 2 ]

1 голос
/ 25 августа 2011

, поэтому многие функции с переменными числами включают варианты, которые принимают va_list с.

см. NSLogv.

0 голосов
/ 25 августа 2011
#if DEBUG == 0
#define DebugLog(...)
#elif DEBUG == 1
#define DebugLog(...) NSLog(__VA_ARGS__)
#endif

Затем вызовите его, используя DebugLog(@"Uh oh: %@", someArgument);. Если для DEBUG установлено значение 1, препроцессор будет выдавать NSLog(@"Uh oh: %@", someArgument);. Если установлено значение 0, оно ничего не будет излучать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...