首页 > 代码库 > Xcode6关于Pch文件
Xcode6关于Pch文件
在Xcode6之前新建项目,系统会帮我们自动新建一个以工程名为名字的pch (precompile header)文件,在Supporting FIles文件下会看到一个以 -Prefix.pch结尾文件的文件,pch全称是“precompiled header”,也就是预编译头文件,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,在开发过程中,可以将那些整个工程都广泛使用的头文件包含在该文件下,编译器就会自动的将pch文件中的头文件添加到所有的源文件中去,这样在需要使用相关类的时候不需要使用import就可以直接使用头文件中的内容,很大程度上带来了编程的便利性,但潜在的也带来了一些问题,这也是在Xcode6中默认不再创建pch的原因吧。
个人理解,Xcode 6去掉Precompile Prefix Header的主要原因在于:
(1)去掉自动导入的系统框架类库的头文件,可以提高原文件的复用性,便于迁移。
(2)一个肥胖无比的Prefix Header会大大增加编译时间。
为了取代在Prefix Header中自动导入的框架,可以在每一个需要导入系统框架的文件中通过@import来手动导入,当然要确保Build Settings中的Enable Modules是打开的。
如果在Prefix Header中导入了<objc/runtime.h>,那么我们在工程的每一个文件中可以免费获得使用<objc/runtime.h>的权利,而无需手动在每一个.h/.m文件中导入<objc/runtime.h>。该文件确有其方便之处。
如果一定要用到Precompile Prefix Header,那么怎么在Xcode6中配置Precompile Prefix Header,添加一个pch文件呢?
(1)Command+N,打开新建文件窗口:iOS->Other->PCH file,创建一个pch文件,记住你创建的文件名(命名最好还是已"工程名-Prefix.pch"形式命名,例如a-Prefx.pch),等下配置路径要用:
例如pch文件名叫:DaiDaiFa.pch
,
(2)接下来设置Build Settings,配置一些信息(配置路径时pch文件名要跟你当时创建时的pch文件名要相同):
如下图新建了一个a-Prefix.pch文件
注意:开关Precompile Prefix Header时,pch的编译和导入机制是有很大不同的。
有些人对Precompile Prefix Header的值可能有些疑问(Yes/No),在这里解释下:
如果Precompile Prefix Header为NO,那么每个引用了pch内容的.m文件都要编译一次pch,可能Apple会另外做缓存机制,但是这样还是降低了编译的速度。
既然Apple标准都建议我们不用pch了,那么还是尽量少用吧。当然,如果一定要用,还是尽量减少pch文件中的内容,降低工程对pch文件的依赖性,便于日后的迁移和解耦。
Xcode6关于Pch文件