博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSLog打印信息的从新设置
阅读量:4679 次
发布时间:2019-06-09

本文共 1298 字,大约阅读时间需要 4 分钟。

前提:在XCode做开发调试时往往需要打印一些调试信息做debug用,大家知道当打印信息的地方多了之后在模拟器上跑可能不会有什么问题,因为模拟器用的是电脑的硬件但是当应用跑在设备上时这些输出语句会在很大程度上影响应用的性能,针对这种问题可以写一些宏来控制这些调试信息的输出。

 

在release版本禁止输出NSLog内容

 

因为NSLog的输出还是比较消耗资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉。

我们可以在发布版本前先把所有NSLog语句注释掉,等以后要调试时,再取消这些注释,这实在是一件无趣而耗时的事!还好,还有更优雅的解决方法,就是在项目的prefix.pch文件里加入下面一段代码,加入后,NSLog就只在Debug下有输出,Release下不输出了。

 

如何实现:

在-Prefix.pch(pch全称是“precompiled header”,也就是预编译头文件,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,这样做的目的提高编译器编译速度。我们知道当我们修改一个工程中某个文件代码时候,编译器并不是重新编译所有所有文件,而是编译改动过文件的,假如pch中某个文件修改了,那么pch整个文件里包含的的其他文件也会重新编译一次,这样就会消耗大量时间,所以它里面添加的文件最好是是很少变动或不变动的头文件或者是预编译的代码片段;)文件中添加[plain] view plaincopy

    1. #ifdef DEBUG
    2. #define NSLog(...) NSLog(__VA_ARGS__)
    3. #define debugMethod() NSLog(@"%s", __func__)
    4. #else
    5. #define NSLog(...)
    6. #define debugMethod()
    7. #endif 

      上段代码的意思就是 用宏指令做一个判断,如果DEBUG为真,则编译#ifdef到#endif宏定义,否则编译器就不编译;

      这个DEBUG在哪设置呢,

      在 "Target > Build Settings > Preprocessor Macros > Debug" 里有一个"DEBUG=1"。

      设置为Debug模式下,Product-->Scheme-->SchemeEdit Scheme
      设置Build Configuration成Debug时,就可以打印nslog了。
      设置Release,发布app版本的时候就不会打印了,提高了性能
    8. 这中写法可以打印的时候可以不添加 @符合
    9. #ifdef DEBUG

       # define ZXLog(fmt, ...) NSLog((@"%s -%d " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

      //# define ZXLog(...) {}

      #else

      # define ZXLog(...) {}

      #endif

转载于:https://www.cnblogs.com/likuiliang/p/3989916.html

你可能感兴趣的文章
Linux进程间通信---共享内存
查看>>
Computer Information
查看>>
交换机/路由器上的 S口 F口 E口
查看>>
P1298(矩阵切割)DP
查看>>
wzplayer for delphi demo截图
查看>>
团队第二周:SRS文档
查看>>
Zookeeper的安装与使用:
查看>>
密码策略限制最大与最小长度
查看>>
正则表达式模式
查看>>
使用iframe实现同域跨站提交数据
查看>>
Mouse点击之后,复制GridView控件的数据行
查看>>
ASP.NET开发,从二层至三层,至面向对象 (2)
查看>>
如何查看自己电脑支持OpenGL core版本
查看>>
页面元素定位 XPath 简介
查看>>
[转]loadrunner:系统的平均并发用户数和并发数峰值如何估算
查看>>
Linux下Tomcat重新启动
查看>>
HTML Table to Json
查看>>
Theano 学习笔记(一)
查看>>
1.7 节点进行排序显示
查看>>
web最佳实践
查看>>