PCH文件是一個標準的預編譯頭文件( Pre-Compiled Header),在Xcode6之前的版本中,系統模板會在Supporting Files文件夾自動創建。但在Xcode6之后的版本中取消了這一文件,如果我們需要使用pch文件,則需要手動創建。去掉的主要的原因:
1、去掉自動導入的系統框架類庫的頭文件,可以提高原文件的復用性,便于遷移。
2、一個體積大的Prefix Header會大大增加編譯時間。
再來看看pch的作用:
1.存放一些全局的宏(整個項目中都用得上的宏)
2.用來包含一些頭文件(整個項目中都用得上的頭文件)
3.能自動打開或者關閉日志輸出功能
如果你的pch文件確實很大,那那肯定影響編譯速度,蘋果去掉他可能是要加快編譯時間增加用戶體驗。雖然失去了編程的便利性。事實上,正確運用pch文件時預編譯后的頭文件會被緩存起來,再次編譯的時候就不需要重新編譯pch文件中導入的內容,編譯速度并不會降低很多。很重要的一點就是pch文件確實給我們編程帶來便利,我們不用在每個文件內重復引用另一個文件;那怎樣才能提高編譯速度呢?降低編譯速度的罪魁禍首就是大量的共用性不高的宏定義和頭文件的引入。編譯的時候整個工程范圍地查找和替換這些宏定義字段,重復導入這些頭文件,不慢就奇怪了。
現在介紹下pch文件如何手動創建:
1、首先在左側目錄文件夾下右擊創建New File...,下拉找到PCH File(筆者用的Xcode8),點擊Next:
??2、命一個名字,然后點擊Create,就生成好了pch文件:
??3、生成好了pch文件,并不能代表能用了,因為還需要給pch文件配置路徑:
- 把Precompile Prefix Header為YES,這樣的話pch會被預編譯,預編譯后的pch文件會被緩存起來,從而提高編譯速度。當 Precompile Prefix Header 為NO時,那么pch不會被預編譯,而是在每一個用到它導入的框架類庫的.m文件中編譯一次。
- 給Prefix Header設置路徑,只需要點擊pch文件然后按住鼠標左鍵拖過來就行,但是
/Users/Song/Desktop/RRS
代表的是絕對路徑,當用別的電腦時就不能識別了,這時就可以用到$(SRCROOT)
來替換,在iOS中$(SRCROOT)
代表的是項目根目錄下,路徑形式為:
"$(SRCROOT)/當前工程名字/需要包含頭文件所在文件夾"
所以把路徑改為:
$(SRCROOT)/RRS/PrefixHeader.pch
注意:
一般來說在你向pch添加全局的頭文件之前,必須添加以下代碼:
#endif
#ifdef __OBJC__
這個宏定義的作用是保證只有oc文件可以調用pch里面的頭文件,一些非OC語言不能調用,比如.cpp,.mm。如果不加入,那么如果代碼中帶有.cpp,.mm文件,那么將報錯。NSObjCRuntime.h NSObject.h NSZone.h將會報出編譯異常。
這樣你就可以在pch文件當中添加一些常用頭文件、宏定義了,在編程過程中非常方便!!
聲明: 轉載請注明出處http://www.lxweimin.com/p/a1d61f5cc454