2012-01-09 72 views
3

的你,我敢肯定,很多都知道宏观的iOS debugBlock宏观

#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无处不在,但是这不是看中足以让我:)。

+0

Ay,caramba,叫我乖乖,但是“对我来说不够花哨”作为不使用'#ifdef'的原因? – 2012-01-09 05:45:10

+0

块更干净,具有更好的可读性IMO。这并不是想要成为'幻想',我只是补充说,所以人们不会试图用它作为答案。因为这实际上并没有回答这个问题。 – endy 2012-01-09 17:09:44

回答

3

我觉得有点愚蠢,它是多么简单,但这里是解决方案。

#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); 
}); 

您也可以改变调度方式FO异步如果你的心脏的欲望。