由于Xcode不再自动生成PCH文件(Precompile Prefix Header File),所以需要我们自己创建,在新创建pch文件的时候,需要做的操作:


创建完成之后,在Build Settings
里面找到下图所示位置

关于路径的填写问题,双击打开之后有个弹框,然后用鼠标拖动创建好的 PCH 文件,拖到弹框之后放手,就会自动生成 PCH 的路径
然后用$(SRCROOT)
替换一下,就可以了(注意替换前后显示的路径是一致的方可)


注意观察,替换前后下图显示的路径是没有变化的

以下内容网上查找,属于转载,但发现也是转载文章,尝试但未找到原文章@Enrica_Shi
:
https://www.cnblogs.com/wzdevelop/p/7339262.html

二、编辑PCH文件
由于编辑器会自动帮你把所有的预编译文头文件导入到项目所有的源文件中,所以从编程规范上讲,应该利用条件编译将Objective-C头文件隔离起来。尤其是在混合编程时,这种操作就显得格外重要。下面就具体演示一下。
先在PCH文件中随便导入一个OC分类的头文件,然后在项目中新建一个C语言文件,在没有利用条件编译对OC分类头文件进行有效隔离的情况,按住command + B键编译一下,看看会出现什么情况:

因为编译器会将PCH中的头文件导入到项目中所有的源文件中,而C语言的源文件是不可能识别OC头文件中的内容的,所以编译器会报一堆的错误。现在修改PCH文件,利用条件编译将OC分类的头文件进行隔离,然后再重复上面的操作看一下还有没有报错:

#ifdef OBJC(OBJC前后是两条下划线)和#endif可以将OC的头文件与C语言的源文件进行有效的隔离。也就是说,你在OC头文件前后加了这个条件编译之后,编译器便不再将OC的头文件拷贝到C语言的源文件中,它只会把OC的头文件拷贝到OC的源文件中,所以之前的错误都消失了。
PCH文件可以很方便的将多个文件中都要使用的头文件一次性导入到项目中所有的源文件中,同时,你也可以在PCH文件中定义全局使用的宏,这种操作可以有效帮你节约开发时间。但是,同时你也应该注意到,PCH文件的使用,无形中增加了项目编译的时间,应该有选择性的慎重使用。
网友评论