宏定義輸出(NSLog)

前言:
我們在發(fā)布App的時候烤蜕,??要求我們?nèi)∠械腘SLog兵拢,大概是因為:
1)輸出日志是會大量損耗系統(tǒng)性能。
2)輸出的信息很容易會被截取到粘优,導(dǎo)致信息不安全。
如果一行一行地去注釋掉NSLog呻顽,顯然不是一個明智的選擇雹顺。因此我們可以使用宏去自定義NSLog輸出。

先說一點關(guān)于NSLog使用的格式問題廊遍,我是今天實驗過后才是到嬉愧,也許你之前就已經(jīng)知道,這一點有助于理解下文中宏定義中的格式問題:
通常使用NSLog我是這么用的

NSLog(@"%@", @"大家好"); // 一個參數(shù)
NSLog(@"%@ %@", @"大家好", @"才是真的好"); // 兩個參數(shù)
NSLog(@"%@ %@ %@", @"大家好", @"才是真的好", @"XX真好喉前!"); // 三個參數(shù)
打印結(jié)果:
2016-05-27 11:53:05.045 ViewController[4524:111041] 大家好
2016-05-27 11:53:05.045 ViewController[4524:111041] 大家好 才是真的好
2016-05-27 11:53:05.045 ViewController[4524:111041] 大家好 才是真的好 XX真好没酣!

但是,今天發(fā)現(xiàn)NSLog中的格式可以是下面這樣:

NSLog(@"%@" "%@", @"大家好", @"才是真的好"); // 兩個參數(shù)
NSLog(@"%@" "%@" "%@", @"大家好", @"才是真的好", @"XX真好卵迂!"); // 三個參數(shù)
打印結(jié)果:
2016-05-27 11:53:05.046 ViewController[4524:111041] 大家好才是真的好
2016-05-27 11:53:05.046 ViewController[4524:111041] 大家好才是真的好XX真好裕便!

你看明白了嗎?(__)

1)簡單的NSLog

我們在調(diào)試程序的時候见咒,往往需要輸出一些日志信息偿衰,用到NSLog函數(shù),當(dāng)我們準(zhǔn)備發(fā)布程序改览,需要注釋掉NSLog代碼下翎,這個時候往往會定義一個宏,在調(diào)試的時候宝当,會輸出日志视事,在Release正式版本的時候,會關(guān)閉日志輸出庆揩。代碼如下:

#ifdef DEBUG
#define GCLog(fmt, ...) NSLog((fmt), ##__VA_ARGS__);
#else
#define GCLog(...);

上面這段代碼俐东,是最常見的自定義NSLog的方式跌穗,但是上面的這段代碼有一定的局限性,就是日志信息不夠明確虏辫,如果在調(diào)試窗口打印N多信息的話瞻离,我么想知道某條日志信息是哪個類、哪一行打印的怎么辦呢乒裆?

2)打印詳細(xì)的日志信息

#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"\n[File:%s]\n" "[Function:%s]\n" "[Line:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DLog(...);
#endif

我們下面調(diào)用這個自定義的宏:

- (void)viewDidLoad {
    DLog(@"%@", @"你好")
}

打印結(jié)果如下:

2016-05-27 11:23:36.089 LogisticsDriver[3893:90262] 
[File:/Users/ZZZ/Documents/SVN/LogDemo/LogDemo/ViewController.m]
[Function:-[ViewController viewDidLoad]]
[Line:26]
你好

3)參數(shù)解釋

  1. __VA_ARGS__ 是一個可變參數(shù)的宏套利,很少人知道這個宏,這個可變參數(shù)的宏是新的C99規(guī)范中新增的鹤耍,目前似乎只有g(shù)cc支持(VC6.0的編譯器不支持)肉迫。宏前面加上##的作用在于,當(dāng)可變參數(shù)的個數(shù)為0時稿黄,這里的##起到把前面多余的","去掉的作用,否則會編譯出錯, 你可以試試喊衫。

  2. __FILE__ 宏在預(yù)編譯時會替換成當(dāng)前的源文件名

  3. __LINE__宏在預(yù)編譯時會替換成當(dāng)前的行號

  4. __FUNCTION__宏在預(yù)編譯時會替換成當(dāng)前的函數(shù)名稱
    有了以上這幾個宏,特別是有了__VA_ARGS__ 杆怕,調(diào)試信息的輸出就變得靈活多了族购。

    1. VA_ARGS 是一個可變參數(shù)的宏,很少人知道這個宏陵珍,這個可變參數(shù)的宏是新的C99規(guī)范中新增的寝杖,目前似乎只有g(shù)cc支持(VC6.0的編譯器不支持)。宏前面加上##的作用在于互纯,當(dāng)可變參數(shù)的個數(shù)為0時瑟幕,這里的##起到把前面多余的","去掉的作用,否則會編譯出錯, 你可以試試。
    2. FILE 宏在預(yù)編譯時會替換成當(dāng)前的源文件名
    3. LINE宏在預(yù)編譯時會替換成當(dāng)前的行號
    4. FUNCTION宏在預(yù)編譯時會替換成當(dāng)前的函數(shù)名稱
      有了以上這幾個宏留潦,特別是有了VA_ARGS 只盹,調(diào)試信息的輸出就變得靈活多了。

4)參考

http://www.cnblogs.com/GarveyCalvin/p/4157553.html
http://blog.csdn.net/laomai/article/details/276274
http://stackoverflow.com/questions/21873616/how-to-use-va-args-properly

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兔院,一起剝皮案震驚了整個濱河市殖卑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坊萝,老刑警劉巖孵稽,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屹堰,居然都是意外死亡肛冶,警方通過查閱死者的電腦和手機街氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門扯键,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人珊肃,你說我怎么就攤上這事荣刑∠隗希” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵厉亏,是天一觀的道長董习。 經(jīng)常有香客問我,道長爱只,這世上最難降的妖魔是什么皿淋? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮恬试,結(jié)果婚禮上窝趣,老公的妹妹穿的比我還像新娘。我一直安慰自己训柴,他們只是感情好哑舒,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幻馁,像睡著了一般洗鸵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仗嗦,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天膘滨,我揣著相機與錄音,去河邊找鬼稀拐。 笑死吏祸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钩蚊。 我是一名探鬼主播贡翘,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砰逻!你這毒婦竟也來了鸣驱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蝠咆,失蹤者是張志新(化名)和其女友劉穎踊东,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刚操,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡闸翅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菊霜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坚冀。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鉴逞,靈堂內(nèi)的尸體忽然破棺而出记某,到底是詐尸還是另有隱情司训,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布液南,位于F島的核電站壳猜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滑凉。R本人自食惡果不足惜统扳,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畅姊。 院中可真熱鬧闪幽,春花似錦、人聲如沸涡匀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陨瘩。三九已至腕够,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舌劳,已是汗流浹背帚湘。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甚淡,地道東北人大诸。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像贯卦,于是被迫代替她去往敵國和親资柔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容