iOS:你真的理解你在用的自定義NSLog嗎?app上架須要註釋NSlog嗎?

前言:安全

1.輸出日誌是會大量損耗系統性能函數

2.輸出的信息很容易會被截取到,致使信息不安全。性能

因此咱們會在發行版(Release)取消全部的Log。若是一行一行地去註釋掉Log,顯然不是一個明確的選擇。測試

所以咱們可使用宏去自定義Log輸出。spa

自定義NSLog
咱們在調試程序的時候,每每須要輸出一些日誌信息,用到NSLog函數,當咱們準備發佈程序,須要註釋掉NSLog代碼,這個時候每每會定義一個宏,在調試的時候,會輸出日誌,在Release正式版本的時候,會關閉日誌輸出。代碼以下:調試



上面這段代碼,是最多見的自定義NSLog的方式,可是上面的這段代碼有必定的侷限性,就是日誌信息不夠明確,若是打印N多信息的話,容易形成混淆。那麼,咱們該如何輸出更爲詳細的日誌信息呢?#ifdef DEBUG #define CLog(format, ...) NSLog(format, ## __VA_ARGS__) #else #define CLog(format, ...) #endif



筆者測試以下:
代碼

                     打印信息

雖然上面這段代碼用起來很是方便,可能會有不少的讀者和我同樣,並不理解,爲何要這麼定義,裏面的一些參數究竟是什麼意思?

參數解釋:日誌

  1. __VA_ARGS__是一個可變參數的宏,不多人知道這個宏,這個可變參數的宏是新的C99規範中新增的,目前彷佛只有gcc支(VC6.0的編譯器不支持)。宏前面加上##的做用在於,當可變參數的個數爲0時,這裏的##起到把前面多餘的","去掉的做用,不然會編譯出錯, 你能夠試試。
  2. __FILE__宏在預編譯時會替換成當前的源文件名

     3.__LINE__宏在預編譯時會替換成當前的行號
     4.__FUNCTION__宏在預編譯時會替換成當前的函數名稱
有了以上這幾個宏,特別是有了__VA_ARGS__,調試信息的輸出就變得靈活多了。
看完這段解釋,讀者應該對自定義NSLog有更深的理解了。code

相關文章
相關標籤/搜索