iOS pch檔案詳解
在Xcode6之後,包括現在的Xcode7,都不會自動產生.pch檔案了。貌似已經不推薦使用了。但是在看別人很多項目的時候,還是有包括這個檔案,今天我們來談談.pch是什麼吧。
***_Prefix.pch就是該項目的先行編譯標頭檔。.pch表示PreComplied Header,是一個工程要用到的來自於外部架構的標頭檔列表。Xcode將會首先會編譯.pch中這些標頭檔,以減少在Build整個項目的時間。通常所有的檔案都自動包含了pch檔案,系統在編譯每個.h, .m檔案前,都先會import這個檔案,而不再需要單獨編譯每個檔案中的標頭檔。加速了編譯過程。
如果我們不小心刪掉了.pch檔案,那麼應該怎麼辦呢?自己再建立一個PCH File即可,名字可以任意取。然後再來到項目設定的Build Setting中,右上方搜尋方塊中輸入“pch”進行尋找,找到一個Prefix Header,然後輸入修改後的名字即可。如下:注意這裡是一個相對路徑。
。
。
所以有時候我們常常把很多常用的標頭檔都包含到pch中,比如下面就是我的一個pch檔案:
#ifndef MyPass_pch#define MyPass_pch// Include any system framework and library headers here that should be included in all compilation units.// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.#import AppDelegate.h#import #import AppDelegate.h#endif /* MyPass_pch */
這樣,我們就不需要在所有的.h, .m檔案中包含這三個標頭檔了。但是請注意!!!!!!有一個例外!!!!!
iOS項目中的AppDelegate.h檔案中的#import 不能缺少。這是因為AppDelegate.h檔案是整個項目的開機檔案,比pch檔案早編譯,所以AppDelegate.h中所需的標頭檔不能放入pch中。
我在前面一篇部落格《iOS定義常量的最佳實務》中就如何在項目中定義常量進行了說明,現在有了pch檔案,這也變得很方便了。我們可以在pch檔案中進行#define 宏定義。然後在項目的任何位置都可以使用這個宏定義,不需要顯式的引入pch檔案,非常方便。可惜是pch中不能定義const常量。。。