过滤NSLog和NSAssert

为了避免切换“调试过程”和“发布版本”中,输出NSLog和断言NSAssert删除和添加带来的麻烦,本文介绍一下如何妥善解决这个问题,即在发布版本中自动滤除NSLog和NSAssert,而在调试版本中不受影响。

思想:debug和release分别对应调试版本和发布版本,在debug下允许输出和断言,在release下不允许。

1.准备工作

利用Xcode自带的scheme区分debug和release

(1)新建scheme。在Xcode左上角,如下图所示,点击“New Scheme...”



弹出框如下图所示:点击OK即可,系统会自动命名为"xxx 2"形式。


新建后如下所示:



(2)设置debug和release

如上图所示,分别选中SQLite Persistence和SQLite Persistence 2,点击“Edit Scheme...”选项,设置"Build Configuration"分别为“Debug”和“Release”,如下图所示(以Release为例)


2.设置过滤NSAssert

分别设置预编译条件

(1)Debug: DEBUG=1(或DEBUG),表明在Debug状态下已定义DEBUG相当于 #define DEBUG,这个条件是为过滤NSLog准备的

(2)Release: NS_BLOCK_ASSERTIONS,表明在Release状态下过滤NSAssert,只需要这一个条件就可以过滤断言NSAssert

如下图所示



设置预编译Release: NS_BLOCK_ASSERTIONS还可以采用另外一个方法,如下图方法2所示(上面的方法是下图中的方法1的具体实现步骤)


3.设置过滤NSLog

(1)设置宏定义

在第2步的基础上(设置预编译DEBUG=1),在SQLite Persistence-Prefix.pch文件(xxx-Prefix.pch)最后添加NSLog的宏定义如下所示:

#ifdef DEBUG /* Debug NSLog() -> DNSLog() */
    #define DNSLog(...) NSLog(__VA_ARGS__)
#else
    #define DNSLog(...)
#endif

宏定义表明Debug(已经定义DEBUG=1)状态下自动调用NSLog输出,而在其他状态下不输出。


(2)调用

在调用输出时用DNSLog(@"xxx");代替NSL(@"xxx");语句,如下所示:

    // 输出路径
    DNSLog(@"directory: %@", documentsDirectory);

4.演示

(1)在Debug状态下运行,有输出如下所示


(2)在Release下运行,无输出,如下图




==================================

end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值