许多开发者在Prefix.pch
中添加各种方便的宏定义。但我的问题是,这个Prefix.pch
文件是什么?
如果我从我的
Xcode
中删除Prefix.pch
文件,那么我的应用程序会运行吗?还是会出现错误?或者在构建时崩溃?如何在没有
Prefix.pch
文件的情况下运行我的应用程序?
Prefix.pch
是一个预编译头文件。预编译头文件的发明旨在加快编译速度。这些文件只需提前解析一次,而不必一遍又一遍地解析相同的头文件。
在 Xcode 中,您可以将要使用的头文件导入“前缀头文件”,并启用 Precompile Prefix Header
以进行预编译。但是,前缀头文件的概念与预编译不同。
每个源文件都会在开头隐式包含前缀头文件,就像每个源文件添加了:
#import "Prefix.pch"
在文件顶部,其他任何内容之前。
您可以移除预编译头文件。此问题已在我下面链接的线程中得到解答。它包含了您需要的所有信息和有用的评论。
.pch文件是预编译头文件。
在C和C++编程语言中,头文件是一个文件,其文本可以通过C预处理器自动包含在另一个源文件中,通常由源文件中的编译器指令指定。
前缀头文件被编译并存储在缓存中,然后在编译期间自动包含在每个文件中。这可以加快编译速度,并使您可以在不向使用它的每个文件添加import语句的情况下包含文件。它们不是必需的,实际上每次更改它们时会减慢编译速度。
在Xcode中,转到目标的构建设置(Command-Option-E, build tab),取消选中Precompile Prefix Header(GCC_PRECOMPILE_PREFIX_HEADER)。如果您愿意,也可以删除前缀标题设置的值。
不要将宏放在.pch文件中! .pch文件是项目特定的预编译头文件。它真的不应该超出项目的上下文范围,并且除了#include和#import之外,它真的不应该包含任何东西。
如果您有一些想要在头文件之间共享的宏等内容,请将它们放在自己的头文件中 - Common.h或其他名称 - 并在.pch的开头#include该文件。
前缀头文件会被编译并存储在缓存中,然后在每次编译时自动包含在每个文件中。这可以加快编译速度,并且允许您在不向每个使用它的文件添加导入语句的情况下包含一个文件。它们并不是必需的,实际上每当您更改它们时都会减慢编译速度。
通常,.pch
文件的命名格式为yourProjectName-Prefix.pch
前缀头文件和预编译头文件(.pch)
历史:
[#include -> #import] -> 预编译头文件 .pch -> [@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
.pch
文件。以前它被称为<product_name>-Prefix.pch
。
Xcode:
前缀头文件(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"
< p > 预编译前缀头文件(GCC_PRECOMPILE_PREFIX_HEADER)
- 当选择是时,将使用GCC_PREFIX_HEADER
中的前缀头文件
一次*来生成预编译源,并将存储在缓存中以加快构建时间。
//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
这个特性可以提高编译时间(与#include/#import
相比),因为它会预编译全局的prefix headers
。当prefix headers
的某些内容发生变化时,编译器必须重新编译它们。因此,在这里应该使用稳定(不经常更改)的prefix headers
,否则您将看不到编译时间的改善。此外,您应该支持它。