c++ - iOS debugBlock 宏

标签 c++ objective-c c ios macros

相信很多人都知道这个宏

#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 语句。

我在想的是,有没有一种方法可以让它工作,但需要使用 block 。换句话说,我希望能够做到这一点:

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

是的,我意识到我可以在所有地方执行#ifdef DEBUG,但这对我来说还不够花哨:)。

最佳答案

我对它的简单程度感到有点愚蠢,但这是解决方案。

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

如果您愿意,您也可以更改异步的调度类型。

关于c++ - iOS debugBlock 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783363/

相关文章:

c++ - 用于链接 .lib 文件的代码内关键字

c++ - 线程完成后删除Qt Thread中的对象

运算符重载的 C++ 错误

c++ - 构造用于追加的字符串

objective-c - 将一个填充有 NSString 的 NSArray 转换为 UTF8String vector

c - fscanf() 陷入无限循环

objective-c - 以编程方式更改屏幕锁定超时

ios - 为什么 NSDateFormatter 在 iOS 7 上返回 nil

c - Jstring在.c语言中的比较

c - 表达式必须具有浮点指针的算术类型错误