在Xcode 6以前,在項目中使用pch文件很流行,把頭文件和宏定義都扔進去,能夠少寫不少代碼,提升開發效率。Xcode 6以後,蘋果默認去掉了pch文件,不少人都說是pch下降了編譯速度,蘋果爲了用戶體驗就去掉了。而後大部分人就開始不用pch了。緩存
事實上,pch不但不會下降編譯速度,整體上反而會提升編譯速度。。預編譯後的頭文件會被緩存起來,再次編譯的時候就不須要從新編譯pch文件中導入的內容,從而提升編譯速度。框架
問題1:那麼,爲何會有不少人說pch下降編譯速度?code
我想是由於使用方式不對,反而致使編譯速度下降吧。罪魁禍首就是大量的共用性不高的宏定義和頭文件的引入。編譯的時候整個工程範圍地查找和替換這些宏定義字段,重複導入這些頭文件,不慢就奇怪了。繼承
正確的使用方式:開發
- 不要把全部的宏定義都放到日常文件中,尤爲是共用性較小的宏定義;
- 將公用性高的頭文件放到pch中,好比fundation框架等;
- (整潔性原則)將零散的宏定義專門建立一個頭文件來放置,再導入到pch中,方便查看和修改;
問題2:若是不使用pch,又該如何處理公用的宏、框架和三方庫?io
答案是使用繼承,在父類的頭文件中定義宏和導入共用框架、三方庫。須要用到的纔去繼承。能夠根據項目的框架,各個層之間分開去定義父類。如MVC中的View層,父類中能夠添加控件的Category,屏幕寬高宏等。編譯
問題3:即便知道pch的正確使用方式,爲什麼大部分開發者也儘可能不使用pch文件?效率
有些時候宏、框架和三方庫共用性高不高很難去界定和把握,就會形成糾結狀態,乾脆就不用了。另外一個最大的壞處,我想是pch下降了代碼的可移植性。把類中使用的框架等放在pch中,要麼你要從新去導入,要麼把pch一同拖走,還要刪掉沒用的代碼,代價也是蠻大的。用戶體驗