天天看點

iOS開發中pch檔案的使用誤區探讨

寫在前面:

剛剛開始接觸iOS,也就是在Xcode 6之前,在項目中使用pch檔案很流行,把頭檔案和宏定義都扔進去,可以少寫很多代碼,提高開發效率。Xcode 6之後,蘋果預設去掉了pch檔案,很多人都說是pch降低了編譯速度,蘋果為了使用者體驗就去掉了。然後大部分人就開始不用pch了。

事實上,pch不但不會降低編譯速度,總體上反而會提高編譯速度。。預編譯後的頭檔案會被緩存起來,再次編譯的時候就不需要重新編譯pch檔案中導入的内容,進而提高編譯速度。

  • 問題1:那麼,為什麼會有很多人說pch降低編譯速度?
    • 我想是因為使用方式不對,反而導緻編譯速度降低吧。罪魁禍首就是大量的共用性不高的宏定義和頭檔案的引入。編譯的時候整個工程範圍地查找和替換這些宏定義字段,重複導入這些頭檔案,不慢就奇怪了。
  • 正确的使用方式:
    • 不要把所有的宏定義都放到平常檔案中,尤其是共用性較小的宏定義;
    • 将公用性高的頭檔案放到pch中,比如fundation架構等;

      (整潔性原則)将零散的宏定義專門建立一個頭檔案來放置,再導入到pch中,友善檢視和修改;

  • 問題2:如果不使用pch,又該如何處理公用的宏、架構和三方庫?
    • 答案是使用繼承,在父類的頭檔案中定義宏和導入共用架構、三方庫。需要用到的才去繼承。可以根據項目的架構,各個層之間分開去定義父類。如MVC中的View層,父類中可以添加控件的Category,螢幕寬高宏等。
  • 問題3:即使知道pch的正确使用方式,為何大部分開發者也盡量不使用pch檔案?
    • 有些時候宏、架構和三方庫共用性高不高很難去界定和把握,就會造成糾結狀态,幹脆就不用了。另一個最大的壞處,我想是pch降低了代碼的可移植性。把類中使用的架構等放在pch中,要麼你要重新去導入,要麼把pch一同拖走,還要删掉沒用的代碼,代價也是蠻大的。