在Xcode6以前新建项目,系统会帮咱们自动新建一个以工程名为名字的pch (precompile header)文件,在Supporting FIles文件下会看到一个以 -Prefix.pch结尾文件的文件,pch全称是“precompiled header”,也就是预编译头文件,该文件里存放的工程中一些不常被修改的代码,好比经常使用的框架头文件,在开发过程当中,能够将那些整个工程都普遍使用的头文件包含在该文件下,编译器就会自动的将pch文件中的头文件添加到全部的源文件中去,这样在须要使用相关类的时候不须要使用import就能够直接使用头文件中的内容,很大程度上带来了编程的便利性,但潜在的也带来了一些问题,这也是在Xcode6中默认再也不建立pch的缘由吧。编程
我的理解,Xcode 6去掉Precompile Prefix Header的主要缘由在于:缓存
(1)去掉自动导入的系统框架类库的头文件,能够提升原文件的复用性,便于迁移。框架
(2)一个肥胖无比的Prefix Header会大大增长编译时间。ui
为了取代在Prefix Header中自动导入的框架,能够在每个须要导入系统框架的文件中经过@import来手动导入,固然要确保Build Settings中的Enable Modules是打开的。spa
若是在Prefix Header中导入了<objc/runtime.h>,那么咱们在工程的每个文件中能够免费得到使用<objc/runtime.h>的权利,而无需手动在每个.h/.m文件中导入<objc/runtime.h>。该文件确有其方便之处。code
若是必定要用到Precompile Prefix Header,那么怎么在Xcode6中配置Precompile Prefix Header,添加一个pch文件呢?blog
(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文件的依赖性,便于往后的迁移和解耦。