PCH文件:文件名由“工程名-Prefix.pch”構成的預編譯頭文件。XCode6之前會在Supporting Files文件夾下自動生成,之後則需要手動創建。

一、PCH文件的作用

1. 定義全局性宏;
2. 引用全局性頭文件;
3. 根據運行環境,自動打開或者關閉日誌輸出功能。

二、PCH文件的優點(產生原因)

1. PCH文件的內容能被項目中的其他所有文件共享和訪問,其他地方可直接使用,不用再手動重複定義或引用;
2. 預編譯后的頭文件會被緩存起來,再次編譯時,就不需要重新編譯PCH文件中導入的內容,從而提高編譯速度。

三、PCH文件的缺點(謹慎使用的原因)

 1. 大量的共用性不高的宏定義和頭文件引入,會導致編譯時整個工程範圍地查找和替換這些宏定義字段,或重複導入這些頭頭文件,造成時間過長;
 2. 把類中使用的框架等放入到PCH中,依賴關係不明確,不利於代碼的遷移和解耦,降低了代碼的可移植性和復用性。

四、對PCH文件使用的一些思考

 1. PCH的目的是:提高編譯速度,而不是少敲幾行import;
 2. 造成這些問題的原因在於對PCH文件的使用方式和方法不對。所以,要正確的、適度的使用PCH文件,揚長避短,不要濫用;
 3. 可以考慮按照層級或者功能模塊等方式,定義多個頭文件。將該層級或者模塊共用性較高的宏或文件寫入,供本層使用。如果整個工程需要使用,再導入PCH文件。這樣既可以避免或減少同一個且多餘的文件被重複編譯,增加編譯時間,又可以方便地使用一些全局的東西。
 4. 關於宏定義:宏定義是在預編譯的時候處理的。因此,當你修改宏定義的時候 會導致大量的代碼被重新編譯。另外,宏定義存在許多潛在的bug是因為在預編譯的時候,它並不會被發覺到。替代宏定義,可以考慮使用常量const。
 5. 關於引用:iOS7之後,系統的Module都可以被”semantic import”。使用起來很簡單,把原來的#import換成@import即可。比如:#import <Foundation/Foundation.h>; 換成@import Foundation; 即可。編譯器遇到@import時,會將預編譯好的framework載入,同時也不需要到project settings里添加framework,系統會幫你做這些事情。這些Module只會編譯一次。
結語:本文大部分內容均來自網絡文章,經由作者整理后發布,感謝參考過的文章作者。