iOS开发中pch文件的使用误区探讨

来源:互联网 发布:臭苋菜 知乎 编辑:程序博客网 时间:2024/06/14 01:18

写在前面:

刚刚开始接触iOS,也就是在Xcode 6之前,在项目中使用pch文件很流行,把头文件和宏定义都扔进去,可以少写很多代码,提高开发效率。Xcode 6之后,苹果默认去掉了pch文件,很多人都说是pch降低了编译速度,苹果为了用户体验就去掉了。然后大部分人就开始不用pch了。

事实上,pch不但不会降低编译速度,总体上反而会提高编译速度。。预编译后的头文件会被缓存起来,再次编译的时候就不需要重新编译pch文件中导入的内容,从而提高编译速度。

  • 问题1:那么,为什么会有很多人说pch降低编译速度?

    • 我想是因为使用方式不对,反而导致编译速度降低吧。罪魁祸首就是大量的共用性不高的宏定义和头文件的引入。编译的时候整个工程范围地查找和替换这些宏定义字段,重复导入这些头文件,不慢就奇怪了。
  • 正确的使用方式:

    • 不要把所有的宏定义都放到平常文件中,尤其是共用性较小的宏定义;
    • 将公用性高的头文件放到pch中,比如fundation框架等;
      (整洁性原则)将零散的宏定义专门创建一个头文件来放置,再导入到pch中,方便查看和修改;
  • 问题2:如果不使用pch,又该如何处理公用的宏、框架和三方库?

    • 答案是使用继承,在父类的头文件中定义宏和导入共用框架、三方库。需要用到的才去继承。可以根据项目的框架,各个层之间分开去定义父类。如MVC中的View层,父类中可以添加控件的Category,屏幕宽高宏等。
  • 问题3:即使知道pch的正确使用方式,为何大部分开发者也尽量不使用pch文件?

    • 有些时候宏、框架和三方库共用性高不高很难去界定和把握,就会造成纠结状态,干脆就不用了。另一个最大的坏处,我想是pch降低了代码的可移植性。把类中使用的框架等放在pch中,要么你要重新去导入,要么把pch一同拖走,还要删掉没用的代码,代价也是蛮大的。
0 0