天天看點

開源中國iOS用戶端學習——(一)Prefix.pch檔案

         當我們建立一個工程的時候,在Supporting FIles檔案下會看到一個以  -Prefix.pch結尾檔案的檔案,pch全稱是“precompiled header”,也就是預編譯頭檔案,該檔案裡存放的工程中一些不常被修改的代碼,比如常用的架構頭檔案,這樣做的目的提高編譯器編譯速度。我們知道當我們修改一個工程中某個檔案代碼時候,編譯器并不是重新編譯所有所有檔案,而是編譯改動過檔案的,假如pch中某個檔案修改了,那麼pch整個檔案裡包含的的其他檔案也會重新編譯一次,這樣就會消耗大量時間,是以它裡面添加的檔案最好是是很少變動或不變動的頭檔案或者是預編譯的代碼片段;

在建立一個工程時,pch字尾檔案裡代碼是

或許你會覺得這預編譯代碼很少,但是你可以檢視一下UIKit.h的定義檔案中

這些不少了吧,工程每次運作都編譯是不是很費時間,這些是蘋果公司内部定義的标準頭檔案,我們不能也沒有權限修改這些頭檔案定義内容,是以,當放到pch檔案中會加速編譯過程;

再來看看我們開源中國iOS用戶端pch檔案

我們看到有這樣些檔案也被添加到裡面,可能會想難道這些頭檔案變化不大嗎?

其實,這些檔案特殊之處在于他們都是第三方類庫的頭檔案,第三方類庫将一些對象進行高度封裝,留下接口,然後我們根據類庫接口直接調用就可以,這些第三方類庫一般都比iOS原生自帶的更加簡單易用,比如TBXML解析庫,比iOS自帶的NSXMLPaser解析器速度功能上都會好一些;

還有一些宏定義都是比較常用方式的宏定義,比如定義的開源中國社群的api接口,這些接口變得當然很少了;

然後就剩下最後面的

       工程有Debug Version和Release Version,Debug Version是程式開發過程中版本,它包含了所有調試資訊,一些常用的NSLog列印日志,在程式調試過程工根據我們設定的調試資訊可以看出什麼地方出錯,我們在運作運作一個小程式的時候,會不會首先就想到進行斷點調試呢,應該是首先想着NSLog一下,看看哪個函數方法沒執行,看看是不是哪個數組的值沒取出來。Release Version是釋出版本,不列印NSLog可以加快程式運作速度,減少記憶體使用。   但是到一個大工程中,會有很多很多這樣的NSLog,在我們工程完美運作的時候,釋出Release 版本的時候,難道我們去一行行的注釋調NSLog嗎?假如工程現在原來基礎上釋出一個version 1.2版本的,我們在修改程式的時候豈不是還把原來注釋給取消,那就很麻煩很麻煩了。

是以,此處用到了宏指令

上段代碼的意思就是 用宏指令做一個判斷,如果DEBUG為真,則編譯#ifdef到#endif宏定義,否則編譯器就不編譯;

這個DEBUG在哪設定呢,

在 "Target > Build Settings > Preprocessor Macros > Debug" 裡有一個"DEBUG=1"。

現在我們來做一個測試:

取一個宏指令放到OSAppDelegate.m的application:didFinishLaunchingWithOptions:方法中,并用同一個NSLog做一個對比;

NSLog(@"%s", __func__);

 debugMethod();

首先設定為Debug模式下,Product-->Edit Scheme

跳轉到這個界面

當我設定Build Configuration成Debug時,列印效果圖

當我設定Build Configuration成Release的,列印時效果圖

當Run  Test  Profile  Analyze  Archive的時候,都可以根據需要設定Debug和Release兩個模式運作;

是以我們完全可以用一個宏指令來設定是否列印調試資訊;

     本文轉自新風作浪 51CTO部落格,原文連結:http://blog.51cto.com/duxinfeng/1208696,如需轉載請自行聯系原作者