• Xcode6关于Pch文件


    在Xcode6之前新建项目,系统会帮我们自动新建一个以工程名为名字的pch (precompile header)文件,在Supporting FIles文件下会看到一个以  -Prefix.pch结尾文件的文件,pch全称是“precompiled header”,也就是预编译头文件,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,在开发过程中,可以将那些整个工程都广泛使用的头文件包含在该文件下,编译器就会自动的将pch文件中的头文件添加到所有的源文件中去,这样在需要使用相关类的时候不需要使用import就可以直接使用头文件中的内容,很大程度上带来了编程的便利性,但潜在的也带来了一些问题,这也是在Xcode6中默认不再创建pch的原因吧。

    个人理解,Xcode 6去掉Precompile Prefix Header的主要原因在于:

    (1)去掉自动导入的系统框架类库的头文件,可以提高原文件的复用性,便于迁移。

    (2)一个肥胖无比的Prefix Header会大大增加编译时间。

    为了取代在Prefix Header中自动导入的框架,可以在每一个需要导入系统框架的文件中通过@import来手动导入,当然要确保Build Settings中的Enable Modules是打开的。

    如果在Prefix Header中导入了<objc/runtime.h>,那么我们在工程的每一个文件中可以免费获得使用<objc/runtime.h>的权利,而无需手动在每一个.h/.m文件中导入<objc/runtime.h>。该文件确有其方便之处。

       如果一定要用到Precompile Prefix Header,那么怎么在Xcode6中配置Precompile Prefix Header,添加一个pch文件呢?

    (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),在这里解释下:

    (1)如果Precompile Prefix Header为YES,那么pch会被预编译,预编译后的pch文件会被缓存起来,从而提高编译速度。
     
    (2)如果Precompile Prefix Header为NO,那么pch不会被预编译,而是在每一个用到它导入的框架类库的.m文件中编译一次,降低了编译速度。
    例如a-Prefix.pch导入了<objc/runtime.h>,ViewController.m和AppDelegate.m中都使用了objc_property_t这个类型(注意ViewController.h/m和AppDelegate.h/m都没有另外导入<objc/runtime.h>),那么在Build的过程中,在编译ViewController.m和AppDelegate.m时,a-Prefix.pch会被编译2次,每个.m文件编译一次。
     

    如果Precompile Prefix Header为NO,那么每个引用了pch内容的.m文件都要编译一次pch,可能Apple会另外做缓存机制,但是这样还是降低了编译的速度。

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

     

  • 相关阅读:
    Python Day13:开放封闭原则、函数装饰器、全局局部变量
    Python Day12
    Python Day11
    Python Day10
    drf框架
    drf框架
    drf框架
    drf框架
    vue框架
    vue框架
  • 原文地址:https://www.cnblogs.com/Fc-ios/p/4053027.html
Copyright © 2020-2023  润新知