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