关于断言的一些用法和坑
众所周知,我们在写代码的时候会写一些断言来发现调试阶段的一些异常情况,但是这些异常情况上线后是不应该展示给用户或者让用户感知到的。
通常使用 NSAssert 或基于它的宏。Xcode 4.2 之后在 release 模式下会自动将所有的 NSAssert 优化掉,也就是说,release 模式下,NSAssert 不会被编译到二进制文件中去,主要是通过这个宏 NS_BLOCK_ASSERTIONS 来实现的。
但是项目中接入的第三方库或者其它团队提供的库,无法保证他们也用 NSAssert,写C语言的工程师一般是用 assert 来做断言处理,但是这里就来坑了。具体坑体现在以下两种情况:
assert在release下Xcode是不会自动将这些断言移除,也就是会导致正式生产环境下会导致一些异常(崩溃)。我们可以通过Building Settings-> 搜索“Preprocessor Macros”找到release模式,双击,然后添加,输入NDEBUG=1即可。如图所示

- 说完第一个坑,又来到第二个,如果
pod里面也有用到assert,上述步骤对pod无效。解决方案如图

就是 pod install 之后把每个 pod 的 target 的 release 模式添加 NDEBUG=1。或者也可以在 podspec 里面添加对应的 GCC_PREPROCESSOR_DEFINITIONS 定义,不过由于是第三方库,可能不太方便(自己维护的 pod 另说)。
参考