陈斌彬的技术博客

Stay foolish,stay hungry

预编译头文件(Original Solution: Pre-compiled Headers)

预编译的头文件,或PCH文件,试图解决这个问题,通过提供在编译的预处理阶段预先计算和缓存需要的代码。你可能看过Xcode生成的stock PCH 文件,像下面这样:

#import    
#ifndef __IPHONE_5_0   
#warning "This project uses features only available in iOS SDK 5.0 and later."   
#endif   

#ifdef __OBJC__   
    #import    
    #import    
#endif   

如果开发人员开发的app的targets是iOS5之前的一个SDK,#warning将通知他们。UIKit和Foundation umbrella 头文件是stockPCH的一部分。因为在您的应用程序里的每一个文件将使用Foundation并且大部分会使用UIKit。因此这些都是很好的添加对 于PCH文件以便于在你的APP中预先计算和缓存这些文件的编译文件。

你可能会问“这有什么问题嘛?”PCH没有任何技术性的问题就像是——if it isn’t broke, don’tfix it(没有坏,就不要修)。然而你可能错失了很多性能优势,由于一个易维护的、高度优化的PCH文件导致(你可能会错过了一台主机上的维护良好的,高度优 化的PCH文件的性能优势)。例如你可能在好几个地方用到Map Kit框架,你就会看到了通过添加Map Kit umbrella头文件或者单独的你用到的Map Kit类头文件到PCH文件中对编译时间的提升。

我们都是lazy developers ,没有人有时间去维护我们工作的项目的PCH文件。那就是为什么modules被开发为LLVM的特性。

注意事项:LLVM是一个模块化和可重复使用的编译器和工具技术与Xcode捆绑的集合。 LLVM有几个组成部分:对oc开发者最重要的是clang,原生的C、C++和Objective-C编译器;和LLDB,原生debugger—开发者最好的朋友。

Resourece Reference