Chu*_*uck 17 cocoa cocoa-touch objective-c
学习iPhone编程时,我见过的每个Xcode模板都包含一个AppName-Prefix.pch文件,其中包含以下内容:
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif
Run Code Online (Sandbox Code Playgroud)
我的理解是在编译之前,这个文件的内容以每个源代码文件为前缀.然而,每个其他文件也导入UIKit,这似乎是多余的.例如,main.m开始......
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
...
Run Code Online (Sandbox Code Playgroud)
Mac OS X中的Cocoa应用程序执行相同的操作,在前缀文件和头文件中导入Cocoa.h.
为什么两者都有?我#import从除前缀文件之外的所有源文件中删除了指令,并且编译并正确运行.
Yuj*_*uji 14
我的理解是在编译之前,这个文件的内容以每个源代码文件为前缀
这基本上是正确的,但你需要理解细微的要点:Xcode的每个编译最终归结为gcc或者调用clang.XCode的作用是首先编译X.pch文件:
clang -x X.pch -o X.pch.gch
Run Code Online (Sandbox Code Playgroud)
然后,当a.m编译单个源文件(例如)时,它会发出
clang -include X.pch a.m -o a.o
Run Code Online (Sandbox Code Playgroud)
加载pch文件,触发预编译头的使用.因此,从编译器的角度来看,pch文件内容并不是真正自动加上前缀.相反,Xcode在调用编译器时将预编译头标头添加到文件中.
未来版本的XCode可能会停止这样做.所以,最好是保持#import在你.m或.h文件,太.
您也可以这样考虑:pch文件的使用正是Xcode在幕后为我们所做的事情,以加快编译过程.因此,我们不应该以一种基本上依赖于它的方式编写代码,比如不UIKit.h从我们的.m/ .hfiles 导入文件.
(另外,在我看来,如果你没有从.h和.m文件中正确导入适当的头文件,XCode4的语法着色会变得混乱.)
| 归档时间: |
|
| 查看次数: |
2350 次 |
| 最近记录: |