NSLog 使用
在XCode做开发调试时往往需要打印一些调试信息做debug用
NSLog 性能问题
它的运行会占用时间和设备资源。当打印信息的地方多了之后在模拟器上跑可能不会有什么问题,因为模拟器用的是电脑的硬件,但是当应用跑在设备上时这些输出语句会在很大程度上影响应用的性能,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉,针对这种问题可以写一些宏来控制这些调试信息的输出。
解决方案:
简单粗暴的解决方案:在APP release前,将所有的NSLog注释掉,简单有效,但副作用是:下次你要调试时,又得将NSLog一个个取消注释。
正确的解决方案:你以release模式编译的程序不会用NSLog输出,而你以debug模式编译的程序将执行NSLog的全部功能。 在release版本禁止输出NSLog内容。
如何实现?
- 在 xxx.pch (预编译文件) 中添加以下代码:
1 2 3 4 5 6 7 8 |
//用宏指令做一个判断,如果DEBUG为真,则编译#ifdef到#endif宏定义,否则编译器就不编译; #ifdef DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NSLog(@"%s", __func__) #else #define NSLog(...) #define debugMethod() #endif |
- 设置DEBUG
在 “Target > Build Settings > Preprocessor Macros > Debug” 里有一个”DEBUG=1”。