OC学习11:Pch文件
什么是 Pch?
pch
文件是一个标准的 预编译头文件(Pre-Compiled Header)
,在 Xcode6
之前的版本中,系统模板会在 Supporting Files文件夹
自动创建。但在 Xcode6
之后的版本中取消了这一文件,如果我们需要使用 pch
文件,则需要 手动创建
。
去掉的原因:
1、去掉自动导入的系统框架类库的头文件,可以提高原文件的复用性,便于迁移。
2、一个体积大的Prefix Header
会大大增加编译时间。
Pch 有什么作用?
存放一些
全局的宏(整个项目中都用的上的宏)
用来包含一些
全局头文件(整个项目中都用得上的头文件)
能自动打开或者关闭日志输出功能
Pch 缺点?
如果你的pch文件确实很大,那那肯定影响编译速度,苹果去掉他可能是要加快编译时间增加用户体验。虽然失去了编程的便利性。事实上,正确运用pch文件时预编译后的头文件会被缓存起来,再次编译的时候就不需要重新编译pch文件中导入的内容,编译速度并不会降低很多。很重要的一点就是pch文件确实给我们编程带来便利,我们不用在每个文件内重复引用另一个文件;那怎样才能提高编译速度呢?降低编译速度的罪魁祸首就是大量的共用性不高的宏定义和头文件的引入。编译的时候整个工程范围地查找和替换这些宏定义字段,重复导入这些头文件,不慢就奇怪了。
Pch 使用
- 创建
.pch
文件
- File -> New -> File… 或 Command + N
- 命名一个名字,然后点击 Create,就生成好了 pch 文件
- 配置文件路径
创建好了 pch 文件,但并不代表现在就能用了,还需要给 pch文件 配置路径
- 把
Precompile Prefix Header
为YES
,这样的话pch会被预编译
,预编译后的pch文件会被缓存起来
,从而提高编译速度。当Precompile Prefix Header
为NO
时,那么pch不会被预编译
,而是在每一个用到它导入的框架类库的.m
文件中编译一次
- 给
Prefix Header
设置路径,只需要点击pch文件然后按住鼠标左键拖过来就行,但是/Users/mac/Desktop/OC学习/OC面试重点/Pch/Pch/PrefixHeader.pch
代表的是绝对路径
,当用别的电脑时就不能识别了,这时就可以用到$(SRCROOT)
来替换 ,在iOS中$(SRCROOT)
代表的是项目根目录
下,路径形式为:$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹,所以把路径改为$(SRCROOT)/Pch/PrefixHeader.pch
注:
$(SRCROOT) :项目根目录
- 使用
- 一般会在
pch
文件下添加全局的头文件前,添加如下代码
1 | #ifndef PrefixHeader_pch |
这个宏定义的作用是
保证只有oc文件可以调用pch里面的头文件
,一些非OC语言不能调用,比如.cpp,.mm
。如果不加入,那么如果代码中带有.cpp,.mm
文件,那么将报错。NSObjCRuntime.h、NSObject.h、NSZone.h
将会报出编译异常。这样你就可以在pch文件当中添加一些常用头文件、宏定义了,在编程过程中非常方便!!
- Post title:OC学习11:Pch文件
- Post author:张建
- Create time:2023-03-08 19:43:38
- Post link:https://redefine.ohevan.com/2023/03/08/OC/OC学习09:Pch文件/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.