一、 PCH文件的作用
Xcode中,PCH文件在程序編譯的時候會自動包含進去。也就是說PCH中的內容是全局的,可以使用在程序的任何地方,通過這個特性,我們可以概括到PCH的作用有以下幾個方面:
(1)將經常使用的宏定義在該文件,可以避免多次定義的麻煩
(2)包含多次使用的.h文件
(3)其他需要全局定義的變量等
Xcode6.0之前會自動創建該文件,開發者直接使用即可。Xcode6.0之后需要開發者自己創建配置,至於為什么大概是因為:
(1)不利於代碼的移植。 主要體現在部分頭文件被寫入PCH,移植的時候如果沒有將PCH的頭文件包含,新項目則會缺失很多頭文件。
(2)造成隱式依賴。本來我們可以通過掃描xxx.h和xxx.m文件,找到xxx所依賴的模塊。但是濫用pch會讓這些依賴關系被掩蓋,因為你的文件可能隱式地依賴了pch中定義的某些頭文件。我在另外一篇文章架構設計中的循環引用中提到文件之間不應該循環引用,否則系統將越來越復雜和不可維護。
(3)如果PCH中的頭文件很多且很大,會造成預編譯的過程便的緩慢,體現在用戶的體驗上則表現為首次進入APP的時間變長,體驗效果欠佳。
(4)XCode 中添加了Modules的引入可以更好地替代預編譯頭文件。目前Modules只能針對Xcode7及以上的SDK。
但是PCH文件也並沒有完全退出舞台,只要合理使用,PCH還是能給我們帶來不少方便的。Xcode不自動配置PCH文件,我們可以手動進行配制。
二、創建、配置PCH文件
Xcode中 command+N, 選中other ,可以看到其中就有PCH File,創建。取名字最好跟APP關聯便於識別,假如這里命名為Test1PCH。
創建好了之后進行配制:
(1)找到 Project > Build Settings > 搜索 “Prefix Header“;
(2)“Apple LLVM 7.0 -Language″ 欄目中你將會看到 Prefix Header 關鍵字;
(3)輸入: $(SRCROOT)/Test/Test1Pch.pch;注意這里最好使用相對路徑,后兩項分別代表 Target名稱 和 PCH文件。
(4)將Precompile Prefix Header為YES,預編譯后的pch文件會被緩存起來,可以提高編譯速度。效果如下
最后,Clean 並且 build 你的項目. 創建的PCH文件就可以使用了。