Xcode Precompile Prefix Header淺析

來源:互聯網
上載者:User

標籤:pch   precompile   xcode 6   build settings   

在Xcode 4, 5的模板工程中可以看到Precompile Prefix Header,但是在Xcode 6被閹割掉了,原因可以參考下面兩個連結:

http://stackoverflow.com/questions/24158648/why-isnt-projectname-prefix-pch-created-automatically-in-xcode-6

http://blog.csdn.net/lihuiqwertyuiop/article/details/39268101#comments


個人理解,Xcode 6去掉Precompile Prefix Header的主要原因在於:

(1)去掉自動匯入的系統架構類庫的標頭檔,可以提高原檔案的複用性,便於遷移。

(2)一個肥胖無比的Prefix Header會大大增加Build Time。


為了取代在Prefix Header中自動匯入的架構,可以在每一個需要匯入系統架構的檔案中通過@import來手動匯入,當然要確保Build Settings中的Enable Modules是開啟的。

如果在Prefix Header中匯入了<objc/runtime.h>,那麼我們在工程的每一個檔案中可以免費獲得使用<objc/runtime.h>的權利,而無需手動在每一個.h/.m檔案中匯入<objc/runtime.h>。該檔案確有其方便之處。


因此,如果一定要用到Precompile Prefix Header,可以參考Xcode 5的配置來手動設定。
(1)在工程中增加一個pch檔案,命名還是按照Xcode 5的模板比較好:工程名-Prefix.pch,例如a-Prefx.pch
(2)設定Build Settings

其中Prefix Header指定pch檔案的位置。



注意:開關Precompile Prefix Header時,pch的編譯和匯入機制是有很大不同的。
如果Precompile Prefix Header為YES,那麼pch會被先行編譯,先行編譯後的pch檔案會被緩衝起來,從而提高編譯速度。可以從下面的Build Log中看出:



如果Precompile Prefix Header為NO,那麼pch不會被先行編譯,而是在每一個用到它匯入的架構類庫的.m檔案中編譯一次。例如a-Prefix.pch匯入了<objc/runtime.h>,ViewController.m和AppDelegate.m中都使用了objc_property_t這個類型(注意ViewController.h/m和AppDelegate.h/m都沒有另外匯入<objc/runtime.h>),那麼在Build的過程中,在編譯ViewController.m和AppDelegate.m時,a-Prefix.pch會被編譯2次,每個.m檔案編譯一次。如:


由圖可知,如果Precompile Prefix Header為NO,那麼每個引用了pch內容的.m檔案都要編譯一次pch,可能Apple會另外做緩衝機制,但是這樣還是降低了編譯的速度。


既然Apple標準都建議我們不用pch了,那麼還是盡量少用吧。當然,如果一定要用,還是盡量減少pch檔案中的內容,降低工程對pch檔案的依賴性,便於日後的遷移和解耦。


Xcode Precompile Prefix Header淺析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.