IOS 中 pch 文件详解

在 Xcode6 之前,创建一个新工程会在 Supporting files 文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch 头文件的内容能被项目中的其他所有源文件共享和访问。是一个预编译文件。从 Xcode6 开始,创建新工程时 Xcode 就没有自动创建 pch 文件了,不过可以自己手动创建,如下所示:

这里写图片描述

pch 文件的命名一般与工程名相同。苹果之所以在之后的 Xcode 版本中不再自动生成 pch 文件,是因为把大量的头文件和宏定义放到 pch 文件内,导致编译时间过长,去掉它可以加快编译时间以增加用户体验,虽然可能失去了编程的便利性。

创建了 pch 文件之后并不代表就完成了,还需指定预编译相关设置,如下所示:
在工程的TARGETS里边 Building Setting 中搜索Prefix Header,然后把 Precompile Prefix Header 右边的 NO 改为 YES(将Precompile Prefix Header为YES,预编译后的 pch 文件会被缓存起来,可以提高编译速度),修改 pch 文件的路径(相对路径,相对于工程文件位置的路径)。

这里写图片描述

完成以上步骤后,编译(cmd+B)一下程序即可。

下面来讲讲 pch 文件的作用:

1. 放一些全局的宏

有时候一个宏定义会在多个文件都会出现,为了避免在每个文件中都进行一次宏定义,此时可在 pch 文件中进行宏定义,可作为全局使用。
这里写图片描述

2. 导入一些全局都需要的头文件,一般开发中放工具类的头文件, 或者分类头文件等

例如有时候需要在多个文件都要导入某头文件,可与宏定义一样,在 pch 文件中声明该头文件。
这里写图片描述

3. 管理日志输出

日志输出非常耗性能,一般发布的时候不需要日志输出,只有调试的时候才需要。通常在开发中弄一个自己的日志输出,不要系统自带的 NSLog 。

#define FGLog(...) NSLog(__VA_ARGS__)

… 表示能接收任何参数;
VA_ARGS 表示左边 … 的参数会替代到右边NSLog中。,一般双下划线表示系统宏。

(1) 如果不想打印了,直接注释后边的宏

#define FGLog(...) // NSLog(__VA_ARGS__);

(2) 还可以通过一个宏进行条件编译,在调试阶段,Xcode会自动定义一个 DEBUG 宏,利用这个宏,就能进行条件编译。

#ifdef DEBUG  //调试阶段
#define FGLog(...) NSLog(__VA_ARGS__)
#else         //发布阶段
#define FGLog(...) 
#endif

默认状态下,直接运行程序都是处理调试阶段,可以通过如下方法实现灵活的软件运行状态转换(默认软件运行在 debug 或者 release 状态):

这里写图片描述

注意:在pch写的有关 OC 的东西,最好放在 #ifdef OBJC, Xcode 在每个 OC 文件中都定义了这个宏,也就意味着只有 OC 中的文件才拥有这些宏,避免项目中有 C 文件的时候报错。如果在 C 文件中,使用 #import,就会报错,因为 C 文件不能识别 #import,只有 OC 文件才能识别。在 pch 中的东西能被项目中的所有文件共享,C 文件共享 #import 就报错。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值