ios中pch文件的創建與配置


 PCH文件(Precompile Prefix Header File),也就是預編譯頭文件,其作用就是,方便你一次性導入在多個文件中同時用到的頭文件、宏或者URL地址等(全局使用),可以有效的幫你節約時間,提高開發效率。但是,自從Xcode 5之后,這個文件默認就不再提供了,如果你還想繼續使用的話,需要手動創建並配置。至於為什么默認不再提供,可能是出於提高編譯效率方面的考慮,畢竟預編譯也會提高Build的時間。

一、手動創建和配置PCH文件

  
  下面就基於彩票項目,演示一下如何創建和手動配置PCH文件。選擇項目目錄中Other模塊文件夾,按住command + N組合鍵,在彈出的Choose a template for your new file窗口中,選擇Other模塊下的PCH File,如下圖所示:


新建一個PCH文件.png

  PCH文件的命名一般和它所在的項目同名。新建完PCH文件以后,先在Xcode中對其進行手動配置。點擊工程文件名,然后點擊Build Settings,在搜索框中輸入Prefix,就可以快速定位到手動配置PCH文件的位置了:


快速定位到手動配置PCH文件的位置.png

  將Precompile Prefix Header后面的值修改為YES,然后雙擊Prefix Header后面的空白處,Xcode會彈出一個輸入框,直接將PCH文件在項目中的相對路徑粘貼上去,按回車鍵即可配置成功:


在Xcode中配置PCH文件.png

  如何獲取PCH文件在項目中的相對路徑?我們先來看如何獲取PCH文件在項目中的絕對路徑。點擊項目目錄中的PCH文件,然后點擊Xcode右上角的Show the file Inspector即可獲取PCH文件在項目中的絕對路徑:


獲取PCH文件在項目中的絕對路徑.png

  其實獲取相對路徑也是有技巧的。如果你對Xcode工程目錄比較熟的話,肯定會注意到,每次創建一個項目以后,項目文件夾下面一定會有一個跟它同名的子文件夾,而從這個子文件夾往后,直到PCH文件所在的位置,它就是PCH文件在項目中的相對路徑。以我們這個PCH文件為例,你有了全路徑以后,從ESMyLottery.pch往前一直復制,直到你發現有兩個相同的"網易彩票"時停止即可,這個就是你的PCH文件在項目中的相對路徑:


如何獲取PCH文件在項目中的相對路徑.png

  如果你還是不放心的話,可以右擊PCH文件,點擊Show in Finder,打開PCH文件在硬盤目錄中的位置,然后一級一級的往前面數也可以:


獲取PCH文件在項目中的相對路徑.png

  數完了你的PCH文件在項目中的級數,在復制PCH文件相對路徑時按照級數往前面復制即可。

二、編輯PCH文件

  
  由於編輯器會自動幫你把所有的預編譯文頭文件導入到項目所有的源文件中,所以從編程規范上講,應該利用條件編譯將Objective-C頭文件隔離起來。尤其是在混合編程時,這種操作就顯得格外重要。下面就具體演示一下。

  先在PCH文件中隨便導入一個OC分類的頭文件,然后在項目中新建一個C語言文件,在沒有利用條件編譯對OC分類頭文件進行有效隔離的情況,按住command + B鍵編譯一下,看看會出現什么情況:


混合編程時沒有對OC頭文件進行隔離的情況.gif

  因為編譯器會將PCH中的頭文件導入到項目中所有的源文件中,而C語言的源文件是不可能識別OC頭文件中的內容的,所以編譯器會報一堆的錯誤。現在修改PCH文件,利用條件編譯將OC分類的頭文件進行隔離,然后再重復上面的操作看一下還有沒有報錯:


利用條件編譯對OC的頭文件進行有效的隔離.gif

  #ifdef _OBJC_(OBJC前后是兩條下划線)和#endif可以將OC的頭文件與C語言的源文件進行有效的隔離。也就是說,你在OC頭文件前后加了這個條件編譯之后,編譯器便不再將OC的頭文件拷貝到C語言的源文件中,它只會把OC的頭文件拷貝到OC的源文件中,所以之前的錯誤都消失了。

  PCH文件可以很方便的將多個文件中都要使用的頭文件一次性導入到項目中所有的源文件中,同時,你也可以在PCH文件中定義全局使用的宏,這種操作可以有效幫你節約開發時間。但是,同時你也應該注意到,PCH文件的使用,無形中增加了項目編譯的時間,應該有選擇性的慎重使用。



作者:Enrica_Shi
鏈接:http://www.jianshu.com/p/6d74ef67d05a
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM