
#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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)