iOS 自定义 Log 简介

我们在调试程序的时候,往往需要输出一些日志信息,用到NSLog函数,当我们准备发布程序,需要注释掉NSLog代码,这个时候往往会定义一个宏,在调试的时候,会输出日志,在Release正式版本的时候,会关闭日志输出。代码如下:

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

dog

参数解释:

  1. VA_ARGS是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的”,“去掉的作用,否则会编译出错, 你可以试试。stackOverflow

  2. FILE宏在预编译时会替换成当前的源文件名

  3. LINE宏在预编译时会替换成当前的行号

  4. FUNCTION宏在预编译时会替换成当前的函数名称

有了以上这几个宏,特别是有了VA_ARGS,调试信息的输出就变得灵活多了。