在iOS開發(fā)過程中,我們經(jīng)常要用到NSLog來打印一些調(diào)試信息,但是其實這些打印還是很消耗系統(tǒng)資源的,有一個笨辦法就是每次調(diào)試完就把NSLog注釋,可是這也太浪費時間了,因為有可能你下次調(diào)試還要用到此NSLog.想要完美的解決這個問題有兩個方法,在此說一個用的比較多的,樓主之前也是一直在用此方法,但是最近在使用的時候遇見了些坑,也算是愚蠢之極,特此記錄下:
其實就是通過DEBUG條件編譯全局控制,先上代碼:
//如果有Debug這個宏的話,就允許log輸出...可變參數(shù)
#ifdef DEBUG? //調(diào)試階段
#define NSLog(...)? NSLog(__VA_ARGS__)
#else //發(fā)布階段
#define NSLog(...)
#endif
因為是全局控制,首先創(chuàng)建pch文件,具體方法較為簡單,不過在Xcode6之后注意綁定pch文件的相對路徑,這里不再贅述。之后把上述代碼CV一下,之后是環(huán)境配置見下圖,通過切換Debug和Release,可以控制當(dāng)前工程的編譯環(huán)境,當(dāng)在release環(huán)境下時,pch預(yù)編譯的NSLog相關(guān)函數(shù)執(zhí)行是無效的.
項目發(fā)布時改為Release,NSLog就可以實現(xiàn)不打印了,省去了一個個注釋的麻煩,然后搞定解決,如果沒有效果,這個時候你可以看看下"Target > Build Settings > Preprocessor Macros > Debug"里的"DEBUG"的值是否為1.看圖
Debug那一項直接設(shè)為YES也是可以的.因為上邊代碼的判斷條件就是DEBUG的值為真,然后執(zhí)行打印,否則就是Release環(huán)境,則不打印.(一般默認的就是YES不用設(shè)置,但偏偏樓主就遇到了二班情況).
插一些題外的,有時候我們不想用系統(tǒng)的NSLog,這時我們可以修改代碼
//如果有Debug這個宏的話,就允許log輸出...可變參數(shù)
#ifdef DEBUG? //調(diào)試階段
#define ZPLog(...)? NSLog(__VA_ARGS__)
#else //發(fā)布階段
#define ZPLog(...)
#endif
效果跟上邊的是一樣的!
如果為了嚴謹還可以在pch文件中加如下代碼
//確保在Release下NSlog不打印數(shù)據(jù)
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif