美文网首页
Xcode6及之后为什么要去掉PCH文件

Xcode6及之后为什么要去掉PCH文件

作者: jiaoguifeng | 来源:发表于2016-04-27 17:24 被阅读560次

Xcode6及之后的Xcode版本,创建新工程默认不再创建PCH文件,但是仍可以手动配置PCH文件,具体手动配置方法,Google即可。

先介绍一下这个PCH文件,这是一个预编译文件,处理头文件引用,宏定义等。在开发过程中,可以将那些整个工程都广泛使用的头文件包含在pch文件下,编译器就会自动的将pch文件中的头文件添加到所有的源文件中去,这样再需要使用相关类的时候不需要使用import就可以直接使用头文件中的内容,很大程度上带来了编程的便利性,提高效率。

利用这个特性一般在此文件里做这些工作:

1. 常用到的宏定义。

2. 开发当中可能需要被经常包含多次的.h文件

3. log输出开关控制。在release版本里面不需要输出。

但是为什么在Xcode6之后,苹果将其从默认创建状态给移除了呢?苹果肯定有他的考虑,但是一直没有找到官方的解释。个人猜测有以下原因:

1. 最大限度的实现模块化,各个模块之间耦合度越低越好,PCH文件的存在会增加各个模块之前的耦合度,降低源文件的复用性,不便于迁移。

2. PCH文件会增加Build Time,在Build Setting中,如果Precompile Prefix Header为No,则每个引用了PCH内容的.m文件都要编译一次PCH,Apple可能会另外做缓存机制,但是还是降低了编译的速度。

那么,没有了PCH文件,但是常用的宏,开发中多次包含的.h文件,log输出开关还要实现那该怎么办呢?

1. 在文件中import需要的头文件;Define放在需要用到的文件中。

2. log输出、宏定义等可以自己创建一个头文件,然后import到需要的文件中去。

3. 各个功能模块之间最好有自己的头文件,主要包含一些log输出、宏定义等,最大限度的减少耦合,让代码复用,迁移更加容易。

既然Apple标准都建议我们不用PCH了,那么还是尽量少用吧。当然,如果一定要用,还是尽量减少pch文件中的内容,降低工程对pch文件的依赖性,便于日后的迁移和解耦。

参考资料

http://www.cocoachina.com/ios/20140916/9635.html

http://stackoverflow.com/questions/24158648/why-isnt-projectname-prefix-pch-created-automatically-in-xcode-6

相关文章

  • pch文件

    pch文件可用于在倒入常用文件,避免在不同的文件中手动导入,在Xcode6之后苹果去掉了pch文件,不过我们编程的...

  • PCH文件

    pch文件可用于在倒入常用文件,避免在不同的文件中手动导入,在Xcode6之后苹果去掉了pch文件,不过我们编程的...

  • iOS中PCH文件的使用

    1. PCH简介 Xcode6之前创建的工程都自带PCH文件,Xcode6之后创建的工程默认不带PCH文件,苹果可...

  • Xcode6及之后为什么要去掉PCH文件

    Xcode6及之后的Xcode版本,创建新工程默认不再创建PCH文件,但是仍可以手动配置PCH文件,具体手动配置方...

  • pch全局引用文件

    pch全局引用文件 Xcode6之后,pch预编译文件默认是不带的,这个需要我们去创建pch文件。

  • iOS开发——pch文件添加和使用

    添加pch文件 Xcode6之后不会自动创建-Prefix.pch文件到你的工程里,所以我们想使用pch文件的话得...

  • 添加pch

    Xcode6之后,pch预编译文件默认是不带的,需要自己创建pch文件1,新建之后选择 Project > Bui...

  • iOS开发--创建Pch预编译文件

    Xcode6之后不再创建pch预编译文件,今天简单介绍一下预编译文件的创建及使用。 在Xcode6之前,创建一个新...

  • Xcode添加pch全局引用文件

    Xcode6之后的版本不再包含pch文件,可根据需要手动添加。 新建PCH文件Paste_Image.png 配置...

  • pch文件

    PCH文件配置 Xcode6及以后版本才能手动配置PCH文件,以前版本都是由Xcode自动生成。作用:放一些公用宏...

网友评论

      本文标题:Xcode6及之后为什么要去掉PCH文件

      本文链接:https://www.haomeiwen.com/subject/revcrttx.html