打印日志這在調(diào)試是非常必須的,但是release時肯定不打印的,占用內(nèi)存降低響應(yīng)速度。
之前覺得這沒有必要寫,但是有人問。整理一下,服務(wù)大眾。
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...)
#endif
這聲明在pch文件中,以后就可以盡情使用NSLog來打印日志了。在debug模式下打印日志,在release模式下不打印。
還有另外一種實現(xiàn)方法,#ifndef __OPTIMIZE__
# define NSLog(...) NSLog(__VA_ARGS__)
#else
# define NSLog(...)
#endif
因為release模式通常會定義 __OPTIMIZE__,debug模式不會。
PS:以上是比較簡單的打印,也是有很詳細(xì)的打印的。
# define DLog(format, ...) NSLog((@"[文件名:%s]" "[函數(shù) 名:%s]" "[行 號:%d]" format), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
打印出來的 就是 [文件名:。。。。Cloud/ViewController.m][函數(shù) 名:-[ViewController viewDidLoad]][行 號:20]CECEEEEECC
=========
簡單介紹以下幾個宏:
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ù)名稱
=========
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。