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

ss2ws0br  于 2022-12-24  发布在  其他
关注(0)|答案(4)|浏览(147)

很多开发人员都在Prefix.pch中添加各种方便的宏,但我的问题是Prefix.pch文件是什么。

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

4smxwvx51#

预编译标头。

这是什么?

一个Prefix.pch是一个预编译头文件。预编译头文件的发明是为了使编译更快。这些头文件只被提前解析一次,而不是一遍又一遍地解析。

X代码

在Xcode中,你可以在一个“前缀头”中添加你想要的头文件的导入,并启用Precompile Prefix Header,这样它们就可以被预编译,但是前缀头背后的思想与预编译是不同的。
每个源文件的开头都隐式包含一个前缀头。就像每个源文件都添加

#import "Prefix.pch"

在文件的顶部,在其他任何事情之前。

删除它。

你可以删除预编译头。这个问题已经在我下面链接的主题中回答过了。它包含了你需要的所有信息以及有用的注解。
Is it OK to remove Prefix.pch file from the Xcode project?

kcwpcxri

kcwpcxri2#

什么是Prefix.pch文件?

.pch是一个预编译头文件。
在C和C++编程语言中,头文件是一个文件,其文本可以被C预处理器自动包含在另一个源文件中,通常通过使用源文件中的编译器指令来指定。
前缀头被编译并存储在缓存中,然后在编译期间自动包含在每个文件中。这可以加快编译速度,并允许您包含文件,而无需向使用该文件的每个文件添加import语句。它们不是必需的,实际上,无论何时更改它们,编译都会变慢。

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

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

还要注意,

不要把宏放在.pch文件中!.pch文件是一个项目特定的预编译头文件。它不应该被用在项目的上下文之外,它不应该包含任何东西,除了#includes和#imports。
如果你有一些宏,你想在头文件之间共享,那么把它们放在它们自己的头文件中--Common. h或者其他什么--然后#include它在.pch的开头

smdnsysy

smdnsysy3#

前缀头被编译并存储在缓存中,然后在编译期间自动包含在每个文件中。这可以加快编译速度,并允许您包含文件,而无需向使用该文件的每个文件添加import语句。它们不是必需的,实际上,无论何时更改它们,编译都会变慢。
通常.pch文件命名格式为yourProjectName-Prefix.pch

0mkxixxg

0mkxixxg4#

前缀标头和预编译标头(.pch)
历史记录:

#include -> #import(https://stackoverflow.com/a/59212007/4770877)-〉预编译头文件.pch -〉@import Module(ObjC);(https://stackoverflow.com/a/59213796/4770877)-〉import Module(Swift)(https://stackoverflow.com/a/67130959/4770877)

预编译标头-前缀.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,以前它被称为<product_name>-Prefix.pch

X代码:

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_HEADER中的Prefix 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

#导入与pch

此功能缩短了构建时间(与#include/#import相比),因为预编译prefix headers(全局)。当prefix headers的某些内容更改时,意味着编译必须重新编译该内容。这就是为什么您应该在此处使用稳定(不经常更改)prefix headers,否则您看不到构建时间的改进。此外,您应该支持它

相关问题