iOS debugBlock macro - PullRequest
       4

iOS debugBlock macro

3 голосов
/ 09 января 2012

Я уверен, что многие из вас знают о макросе

#ifdef DEBUG 
#define DebugLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define DebugLog( s, ... ) 
#endif

Это, конечно, создает функцию под названием DebugLog, которую вы используете вместо NSLog.Затем, когда вы изменяете свой проект из отладочного, он прекращает выполнение всех операторов NSLogs.

Я думал о том, что есть способ заставить это работать, но с блоками.Другими словами, я хочу быть в состоянии сделать это:

DebugBlock(^{
    //Code to only be executed while in Debug
});

Да, я понимаю, что могу просто делать #ifdef DEBUG везде, но мне этого не хватает :)).

1 Ответ

3 голосов
/ 09 января 2012

Я чувствую себя немного глупо из-за того, как все было просто, но вот решение.

#ifdef DEBUG 
#define DebugBlock( ... ) dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ##__VA_ARGS__)
#else
#define DebugBlock( ... ) 
#endif

Использование выглядит примерно так:

DebugBlock(^{
    int i = 12; 
    int b = 400; 
    int Answer = i+b; 
    NSLog(@"%d", Answer);
});

Вы также можете изменить тип отправки на асинхронный, если пожелает ваше сердце.

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