Xcode - PCH文件| 控制NSlog的输出
前言
1 - 在 Xcode 做开发调试时往往需要打印一些调试信息做 debug 用,实际上 NSLog 的输出是比较消耗系统资源的,而且输出的数据也可能会暴露出 App 里的保密数据,所以当发布正式版时需要把这些输出全部屏蔽掉
2 - 我们可以在发布版本前先把所有 NSLog 语句注释掉,等以后要调试时再取消这些注释,那么可以在项目中 prefix.pch文件 里加入下面一段代码,就能够保证 NSLog 只在 Debug 版下有输出,而在 Release 版中就不再输出
PCH
1 - PCH 全称是 Precompiled Header,也就是预编译头文件,自 Xcode 6 起已不在项目中自动生成该。该文件常用来存放的工程中一些不常被修改的代码,比如常用框架头文件。这样做的目的提高编译器编译速度
2 - 当修改一个工程中某个文件代码时候,编译器并不是重新编译所有所有文件,而是编译改动过文件的。假如 PCH 中某个文件修改了,那么 PCH 整个文件里包含的的其他文件也会重新编译一次,这样就会消耗大量时间,所以它里面添加的文件最好是是很少变动或不变动的头文件或者是预编译的代码片段
3 - 创建 PCH 文件
① Command+N:iOS -> Other -> PCH file
② 在 Building Setting 里的 Precompile Header 选项中配置路径:PCH 文件在哪个文件夹下就填写什么样的路径(直接拖进来路径即可自动生成)
说明:如果 Precompile Prefix Header 为 YES,那么 PCH 会被预编译,预编译后的 PCH文件 会被缓存起来,从而提高编译速度;如果 Precompile Prefix Header 为 NO,那么 PCH 文件不会被预编译,而是在每一个用到它导入的框架类库的 .m 文件中编译一次,这就降低了编译速度。既然苹果在 Xcode 6 中去掉了 PCH 文件,那么在开发的过程中可以尽量少用 PCH文件。如果是在需要也要尽量减少 PCH文件 中的内容,降低程序对 PCH 文件的依赖
屏蔽 NSlog 输出
1 - 在 PCH 文件中条件编译即可
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
注:在 Product -> Scheme -> Edit Scheme -> Run -> Build Configuration 中,可以选择 Debug 和 Release 两种模式。选择了 Release 则默认没有定义 Debug,上面代码中 #if...#endif 之间的输出 NSLog 将不会执行