IOS NSLog在版本發(fā)布時(shí)不使其打印的注意事項(xiàng)

在iOS開發(fā)過程中,我們經(jīng)常要用到NSLog來(lái)打印一些調(diào)試信息,但是其實(shí)這些打印還是很消耗系統(tǒng)資源的,有一個(gè)笨辦法就是每次調(diào)試完就把NSLog注釋,可是這也太浪費(fèi)時(shí)間了,因?yàn)橛锌赡苣阆麓握{(diào)試還要用到此NSLog.想要完美的解決這個(gè)問題有兩個(gè)方法,在此說(shuō)一個(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í)行是無(wú)效的.


項(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 不直接用NSLog 摘要: 公司中不直接使用NSLog,而是利用宏定義自己的打印函數(shù),將該打印函數(shù)寫在項(xiàng)目的.pc...
    ttdiOS閱讀 772評(píng)論 2 7
  • 在iOS開發(fā)過程中,我們經(jīng)常要用到NSLog來(lái)打印一些調(diào)試信息,而且一般是習(xí)慣性的大量使用,在模擬器上運(yùn)行可能沒有...
    霖溦閱讀 12,196評(píng)論 18 81
  • 在iOS開發(fā)過程中,我們經(jīng)常要用到NSLog來(lái)打印一些調(diào)試信息,而且一般是習(xí)慣性的大量使用,在模擬器上運(yùn)行可能沒有...
    _TT_閱讀 1,973評(píng)論 0 1
  • iOS開發(fā)過程中,使用的一些常用宏定義 字符串是否為空#define kStringIsEmpty(str) ([...
    goyohol閱讀 5,540評(píng)論 30 84
  • 前提:在XCode做開發(fā)調(diào)試時(shí)往往需要打印一些調(diào)試信息做debug用,大家知道當(dāng)打印信息的地方多了之后在模擬器上跑...
    zfl1024閱讀 3,185評(píng)論 1 1

友情鏈接更多精彩內(nèi)容