什么是Xcode中的Prefix.pch文件?


100

因此,许多开发人员正在向中添加各种便利宏Prefix.pch。但是我的问题是那个Prefix.pch文件。

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

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


Answers:


117

预编译头。

它是什么?

A Prefix.pch是预编译的头文件。发明预编译头文件,以使编译速度更快。这些文件不是一遍又一遍地解析相同的头文件,而是提前被解析一次。

Xcode

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

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

#import "Prefix.pch"

在文件顶部,然后再进行其他操作。

删除它。

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

是否可以从Xcode项目中删除Prefix.pch文件?


24

什么是Prefix.pch文件?

.pch是预编译的头。

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

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

是的,您可以编译和运行不带.pch文件的项目

在Xcode中,转到目标的构建设置(Command-Option-E,构建选项卡),然后取消选中“预编译前缀头”(GCC_PRECOMPILE_PREFIX_HEADER)。如果需要,您还可以删除“前缀标题”设置的值。

另请注意,

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

如果您有一些宏,并且希望在标头之间共享,请将'em'粘贴到它们自己的标头文件(Common.h或其他文件)中,并在.pch开头#include


请考虑添加评论以表明拒绝此古老任务的原因。
Hemang '17

7

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

通常.pch文件命名格式为yourProjectName-Prefix.pch


1

历史:

#include => #import => .pch

#include与#import

预编译头-prefix.pch

#includevs @import具有一个缺点-生成时间慢,因为编译器必须解析和编译.h导入的文件次数。

Precompiled header file - .pch-收集公共标题。当此文件被预编译时,可以在源文件中使用,这可以加快构建时间。

让我们看一下Prefix.pch示例:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

要添加.pch文件,请转到Build Settings

在此处输入图片说明

开发人员必须管理.pch文件,这会增加支持文件的成本。

下一步是@import[关于]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.