如果在PCH文件中导入UIKit,那么为什么它会在每个文件中再次导入?

时间:2014-01-26 03:20:01

标签: objective-c xcode precompiled-headers

如果在我们的`ProjectName.pch&#39;中找到了#import <UIKit/UIKit.h>#import <Foundation/Foundation.h>。文件,使它们全局导入,为什么它们会在Xcode创建新类时自动添加到头文件中?

2 个答案:

答案 0 :(得分:3)

.pch作为编译时优化,我个人建议确保类仍然可以在没有pch的情况下构建(因此仍然可以手动导入到h / m中),这样它就可以A)构建而没有和B)所以如果你重用代码,你可以很容易地看到它的依赖。

  

通常,新生成的iOS项目具有此功能,称为预编译头或前缀头,并且是一个扩展名为.pch的文件。

     

你可以在那里抛出你想要的所有头文件,Xcode会在构建其他内容之前预先编译它,并用它来编译项目中的其他编译单元(例如.m文件)。

     

使用预编译头可能会也可能不会增加编译时间;一般来说,只要你有很多常见的标题和/或大量的源文件,它就会缩短编译时间。

     

然而,将预编译的头部视为一个大的倾销场并不一定是好的做法,因为当你想要在组件之间强制松散耦合时,你的编译单元可以形成对各种东西的隐式依赖。

答案 1 :(得分:1)

只有Apple才知道。

最佳猜测:Apple无法确定导入是否在所有项目的pch文件中,或者是否存在pch文件。这可以保证这些隐式导入编译。