【问题标题】:What is Prefix.pch file in Xcode?Xcode 中的 Prefix.pch 文件是什么?
【发布时间】:2014-07-02 03:37:12
【问题描述】:

许多开发人员正在向Prefix.pch 添加各种便利宏。但我的问题是Prefix.pch 文件是什么。

  • 如果我从我的Xcode 中删除那个Prefix.pch 文件,那么我的应用程序会运行吗?或者它会显示任何错误?还是会在构建过程中崩溃?

  • 如何在没有Prefix.pch 文件的情况下运行我的应用程序

【问题讨论】:

标签: ios xcode


【解决方案1】:

预编译的头文件。

这是什么?

Prefix.pch 是预编译的标头。发明了预编译头文件以加快编译速度。这些文件无需一遍又一遍地解析相同的头文件,而是提前解析一次。

Xcode

在 Xcode 中,您可以在“前缀头文件”中添加所需头文件的导入,并启用 Precompile Prefix Header 以便它们被预编译。但是前缀头背后的想法与预编译不同。

前缀头隐含在每个源文件的开头。就像每个源文件都添加了一样

#import "Prefix.pch"

在文件的顶部,在其他任何东西之前。

删除它。

您可以删除预编译的标头。我在下面链接的线程中已经回答了这个问题。它包含您需要的所有信息以及有用的 cmets。

Is it OK to remove Prefix.pch file from the Xcode project?

【讨论】:

    【解决方案2】:

    什么是 Prefix.pch 文件?

    .pch 是预编译的头文件。

    在 C 和 C++ 编程语言中,头文件是一个文件,其文本可以由 C 预处理器自动包含在另一个源文件中,通常通过在源文件中使用编译器指令来指定。

    前缀头被编译并存储在缓存中,然后在编译期间自动包含在每个文件中。这可以加快编译速度,并允许您包含一个文件,而无需向使用它的每个文件添加导入语句。它们不是必需的,而且在您更改它们时实际上会降低编译速度。

    是的,你可以在没有.pch文件的情况下编译和运行项目

    在 Xcode 中,转到目标的构建设置(Command-Option-E,构建选项卡)并取消选中 Precompile Prefix Header (GCC_PRECOMPILE_PREFIX_HEADER)。如果您愿意,也可以删除 Prefix Header 设置的值。

    还要注意,

    不要将宏放在 .pch 文件中!根据定义,.pch 文件是项目特定的预编译头文件。它真的不应该在项目的上下文之外使用,它真的不应该包含除了#includes 和#imports 之外的任何东西。

    如果你有一些宏并且你想在头文件之间共享,然后将它们粘贴到它们自己的头文件中——Common.h 或其他文件——并在 .pch 的开头#include

    【讨论】:

    • 可能是你复制粘贴了以下问题,没有注明出处:stackoverflow.com/questions/4728225/…
    • 感谢@BenButterworth 在这个旧答案上停下来,当我回答时,我可能会错过归属,但如果你仔细观察,已经改变并划分问题并从你提到的那个中复制答案。感谢您让我知道,现在正在纠正这个问题。但是,我不记得从哪个其他来源复制了剩余的答案。
    【解决方案3】:

    前缀头被编译并存储在缓存中,然后在编译期间自动包含在每个文件中。这可以加快编译速度,并允许您包含一个文件,而无需向使用它的每个文件添加导入语句。它们不是必需的,而且在您更改它们时实际上会降低编译速度。

    一般.pch文件命名格式为yourProjectName-Prefix.pch

    【讨论】:

      【解决方案4】:

      前缀标头和预编译标头 (.pch)

      历史:

      #include => #import => Precompiled Headers .pch => @import Module(ObjC); => import Module(Swift)
      

      [#include vs #import]

      [@import Module(ObjC);]
      [import Module(Swift)]

      预编译头文件 - prefix.pch

      创建新的 .pch 文件

      File -> New -> File... -> PCH File
      

      PrefixHeader.pch 示例:

      #ifndef PrefixHeader_pch
      #define PrefixHeader_pch
          #import <UIKit/UIKit.h>
          #import <Foundation/Foundation.h>
      #endif
      

      从 Xcode 6 开始,您应该手动设置 .pch。以前称为&lt;product_name&gt;-Prefix.pch

      Xcode:

      Prefix Header(GCC_PREFIX_HEADER) - 到.pch 的路径。将.pch 中的所有内容添加到所有源文件

      SomeFile1.h

      //You can skip this section. It will be compiled 
      //#import <UIKit/UIKit.h>
      //#import <Foundation/Foundation.h>
      
      //implicitly next line is used
      #import "PrefixHeader.pch"
      
      

      Precompile Prefix Header(GCC_PRECOMPILE_PREFIX_HEADER) - 当Yes 时,来自GCC_PREFIX_HEADERPrefix headers 将被使用一次* 以生成预编译源并将存储在缓存中,从而加快构建时间

      //path to cached precompiled headers
      /<some_path>/DerivedData/ExperiementsModuleSwift-dsetoksxykdmgvczgtnmaqmjwhzk/Build/Intermediates.noindex/PrecompiledHeaders/SharedPrecompiledHeaders/14385052922615550324
      //e.g
      /Users/alex/Library/Developer/Xcode/DerivedData/ExperiementsModuleSwift-dsetoksxykdmgvczgtnmaqmjwhzk/Build/Intermediates.noindex/PrecompiledHeaders/SharedPrecompiledHeaders/14385052922615550324
      

      #import vs .pch

      #import 有一个缺点 - 构建时间。

      Precompile Header - 缩短构建时间,因为预编译 prefix headers(global)。当prefix headers 的某些内容发生更改时,意味着编译必须再次重新编译。这就是为什么你应该在这里使用稳定的(不经常改变的)prefix headers,否则你看不到构建时间的改进。另外你不应该滥用它,因为这项工作是隐含的,很难支持这样的系统

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-18
        • 2014-08-01
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多