objective-c – 为什么Xcode模板有#imports重复Prefix.pch?

objective-c – 为什么Xcode模板有#imports重复Prefix.pch?,第1张

概述在学习iPhone编程时,我看到的每个Xcode模板都包含一个包含以下内容的AppName-Prefix.pch文件: #ifdef __OBJC__ #import <Foundation/Foundation.h> #import <UIKit/UIKit.h>#endif 我的理解是,这个文件的内容在编译之前是每个源代码文件的前缀。然而,每个其他文件也导入UIKit,这似乎 在学习iPhone编程时,我看到的每个Xcode模板都包含一个包含以下内容的Appname-Prefix.pch文件:

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

我的理解是,这个文件的内容在编译之前是每个源代码文件的前缀。然而,每个其他文件也导入UIKit,这似乎是多余的。例如,main.m开始…

#import <UIKit/UIKit.h>int main(int argc,char *argv[]) {...

在Mac OS X中的Cocoa应用程序也做同样的事情,在前缀文件和头文件中导入Cocoa.h。

为什么有两个?我从除了前缀文件之外的所有源文件中删除了#import指令,并且它编译并正确运行。

解决方法

My understanding is that this file’s contents are prefixed to each of the source code files before compilation

这基本上是正确的,但您需要了解微妙的点:Xcode的每个编译最终归结为gcc或clang的调用。 XCode做的是首先编译X.pch文件:

clang -x X.pch -o X.pch.gch

然后当个别源文件(例如a.m)被编译时,它会发生

clang -include X.pch a.m -o a.o

它加载pch文件,触发使用预编译头。所以,从编译器的角度来看,pch文件的内容并不是自动前缀的。相反,当Xcode调用编译器时,Xcode将预编译的头文件前缀到文件。

XCode的未来版本可能会停止这样做。所以,最好将#imports保存在.m或.h文件中。

你也可以这样想一想:使用pch文件就是Xcode为我们幕后加快编译过程所做的。所以,我们不应该以它本质上依赖于它的方式编写代码,比如不从我们的.m / .h文件导入UIKit.h文件。

(另外,在我看来,如果不从.h和.m文件中正确导入相应的头文件,XCode4的语法着色会变得困惑。)

总结

以上是内存溢出为你收集整理的objective-c – 为什么Xcode模板有#imports重复Prefix.pch?全部内容,希望文章能够帮你解决objective-c – 为什么Xcode模板有#imports重复Prefix.pch?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1036579.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存