IOS NSLog在版本發布時不使其打印的注意事項

在iOS開發過程中,我們經常要用到NSLog來打印一些調試信息,但是其實這些打印還是很消耗系統資源的,有一個笨辦法就是每次調試完就把NSLog注釋,可是這也太浪費時間了,因為有可能你下次調試還要用到此NSLog.想要完美的解決這個問題有兩個方法,在此說一個用的比較多的,樓主之前也是一直在用此方法,但是最近在使用的時候遇見了些坑,也算是愚蠢之極,特此記錄下:

其實就是通過DEBUG條件編譯全局控制,先上代碼:

//如果有Debug這個宏的話,就允許log輸出...可變參數

#ifdef DEBUG? //調試階段

#define NSLog(...)? NSLog(__VA_ARGS__)

#else //發布階段

#define NSLog(...)

#endif

因為是全局控制,首先創建pch文件,具體方法較為簡單,不過在Xcode6之后注意綁定pch文件的相對路徑,這里不再贅述。之后把上述代碼CV一下,之后是環境配置見下圖,通過切換Debug和Release,可以控制當前工程的編譯環境,當在release環境下時,pch預編譯的NSLog相關函數執行是無效的.


項目發布時改為Release,NSLog就可以實現不打印了,省去了一個個注釋的麻煩,然后搞定解決,如果沒有效果,這個時候你可以看看下"Target > Build Settings > Preprocessor Macros > Debug"里的"DEBUG"的值是否為1.看圖

Debug那一項直接設為YES也是可以的.因為上邊代碼的判斷條件就是DEBUG的值為真,然后執行打印,否則就是Release環境,則不打印.(一般默認的就是YES不用設置,但偏偏樓主就遇到了二班情況).

插一些題外的,有時候我們不想用系統的NSLog,這時我們可以修改代碼

//如果有Debug這個宏的話,就允許log輸出...可變參數

#ifdef DEBUG? //調試階段

#define ZPLog(...)? NSLog(__VA_ARGS__)

#else //發布階段

#define ZPLog(...)

#endif

效果跟上邊的是一樣的!

如果為了嚴謹還可以在pch文件中加如下代碼

//確保在Release下NSlog不打印數據

#ifdef DEBUG

#define NSLog(...) NSLog(__VA_ARGS__)

#define debugMethod() NSLog(@"%s", __func__)

#else

#define NSLog(...)

#define debugMethod()

#endif

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 不直接用NSLog 摘要: 公司中不直接使用NSLog,而是利用宏定義自己的打印函數,將該打印函數寫在項目的.pc...
    ttdiOS閱讀 729評論 2 7
  • 在iOS開發過程中,我們經常要用到NSLog來打印一些調試信息,而且一般是習慣性的大量使用,在模擬器上運行可能沒有...
    霖溦閱讀 11,999評論 18 81
  • 在iOS開發過程中,我們經常要用到NSLog來打印一些調試信息,而且一般是習慣性的大量使用,在模擬器上運行可能沒有...
    _TT_閱讀 1,911評論 0 1
  • iOS開發過程中,使用的一些常用宏定義 字符串是否為空#define kStringIsEmpty(str) ([...
    goyohol閱讀 5,392評論 30 85
  • 前提:在XCode做開發調試時往往需要打印一些調試信息做debug用,大家知道當打印信息的地方多了之后在模擬器上跑...
    zfl1024閱讀 3,159評論 1 1