iOS debug模式和release模式

在开发过程中,我们经常需要用到NSLog输出一些信息,甚至有的开发过程,必须在控制台查看输出,有经验的程序员通过控制台输出就能知道整个数据交互的一个流程.但是一个发布的程序,里面带有太多的NSLog输出,肯定对于App性能有所影响,这时候我们可以使用一个宏定义来处理,在开发的时候使用DEBUG模式,在发布的时候使用RELEASE模式.这样,发布的App就不会在程序内部做大量的NSLog输出了.
  简单的代码如下:

#if defined (DEBUG)||defined(_DEBUG)   
 NSLog(@"测试代码");    
NSLog(@"Test Coding");
#endif

上面的#if #endif宏定义的意思就是如果定义了DEBUG,那么就使用NSLog输出;否则这段代码就直接忽略不执行.有人会疑问这个DEBUG和_DEBUG来自哪里,这个其实不用担心,这个来自于Xcode的默认设置,我们可以取消DEBUG模式,开启RELEASE发布模式,如下面的截图所示.
  选择Product->Scheme->Edit Scheme



App发布的时候,这些全部都要改成release模式
这些都选为release,就意味着默认没有定义Debug,则上面代码中#if...#endif之间的输出NSLog不会执行.这样在发布应用程序的时候,就节省了一些硬件设备的资源.

如何确定项目是处于Debug模式还是Release模式下?
首先确定一下项目的Build Settings是否已经设置过宏定义DEBUG,


如果已经设置过,在Preprocessor Macros的Debug后面会有DEBUG=1,如果没有,就手动设置一下.
接下来就可以这样做:

#ifdef DEBUG    
// do sth
#else   
// do sth
#endif

也可以使用正则NSLog语句:

#ifndef DEBUG
#undef NSLog
#define NSLog(args,...)
#endif

幸运的是,这里有一个最简单的办法进行log——通过一个宏,让NSLog只在debug build的时候起作用。将这个功能添加到全局都能访问得到的头文件中。这样你就可以尽情的使用log了,并且当进行production时,不会包含log相关代码。如下代码:

#ifdef DEBUG 
#defineDMLog(...)
NSLog(@"%s %@", __PRETTY_FUNCTION__,[NSString stringWithFormat:__VA_ARGS__])
#else# defineDMLog(...)do{}while(0)

补充:如果上面的写法有点复杂 下面的写法就简单的多

//release屏蔽NSLog
//放在.pch文件里
#ifdef DEBUG
#else
#define NSLog(...) {};
#endif

现在如果使用DMLog,那么将只会在debug build期间打印出log。而production build时则不会有任何log。通过PRETTY_FUNCTION 可以打印出打印log所在的函数。

总结:虽然NSLog非常出色,但它也有一些限制:
只能在本地打印
不支持带级别的log(例如严重、警告等)
NSLog效率低。在进行大量处理时,NSLog会严重影响程序的执行效率
互联网上也有一些框架可以进行日志记录,通过这些框架可以避免NSLog的一些限制。下面有两个不错的:
Cocoa LumberJack – 这是针对Cocoa非常出名的一个日志框架。虽然刚开始用的时候会费劲点,但是它非常强大。
SNLog – NSLog的一个替代品。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,034评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,050评论 25 709
  • 最基本的调试是NSLog及DEBUG预处理器宏 在系统控制台显示日志信息运行应用程序时是最早调试机制之一,利用lo...
    君赏阅读 6,004评论 0 0
  • 1.使用控制台检查程序的状态 2.进行日志记录,并熟练的驾驭NSLog 3.利用对象的生命周期跟踪内存的使用 使用...
    nadou23阅读 7,708评论 0 0
  • 静静地看着窗外 傻傻地坐着发呆 时间过得如此飞快 似一位匆匆的过客 静静地看着窗外 我问是否应该 却无人理睬 也许...
    米桑阅读 2,415评论 2 1

友情链接更多精彩内容