在Xcode 6以前,在项目中使用pch文件很流行,把头文件和宏定义都扔进去,能够少写不少代码,提升开发效率。Xcode 6以后,苹果默认去掉了pch文件,不少人都说是pch下降了编译速度,苹果为了用户体验就去掉了。而后大部分人就开始不用pch了。缓存
事实上,pch不但不会下降编译速度,整体上反而会提升编译速度。。预编译后的头文件会被缓存起来,再次编译的时候就不须要从新编译pch文件中导入的内容,从而提升编译速度。框架
问题1:那么,为何会有不少人说pch下降编译速度?code
我想是由于使用方式不对,反而致使编译速度下降吧。罪魁祸首就是大量的共用性不高的宏定义和头文件的引入。编译的时候整个工程范围地查找和替换这些宏定义字段,重复导入这些头文件,不慢就奇怪了。继承
正确的使用方式:开发
- 不要把全部的宏定义都放到日常文件中,尤为是共用性较小的宏定义;
- 将公用性高的头文件放到pch中,好比fundation框架等;
- (整洁性原则)将零散的宏定义专门建立一个头文件来放置,再导入到pch中,方便查看和修改;
问题2:若是不使用pch,又该如何处理公用的宏、框架和三方库?io
答案是使用继承,在父类的头文件中定义宏和导入共用框架、三方库。须要用到的才去继承。能够根据项目的框架,各个层之间分开去定义父类。如MVC中的View层,父类中能够添加控件的Category,屏幕宽高宏等。编译
问题3:即便知道pch的正确使用方式,为什么大部分开发者也尽可能不使用pch文件?效率
有些时候宏、框架和三方库共用性高不高很难去界定和把握,就会形成纠结状态,干脆就不用了。另外一个最大的坏处,我想是pch下降了代码的可移植性。把类中使用的框架等放在pch中,要么你要从新去导入,要么把pch一同拖走,还要删掉没用的代码,代价也是蛮大的。用户体验