开发时在调试过程中我们会打印很多信息用于调试。当打印较多时,我们不知道某个打印的出处,给定位问题带来不便。如果打印信息能带有该打印的文件和行数信息,会很大程度上帮助我们快速的定位问题。
方法:在全局头文件中定义log
代码:
#ifdef DEBUG
#define NSLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", \
self, \
[[NSString stringWithUTF8String:__FILE__] lastPathComponent], \
__LINE__, \
[NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define NSLog(...)
#endif
详解:
#ifdef DEBUG // 如果在debug模式下
#else // 不在debug模式下
#endif
这是成对出现的,含义及作用和 if...else 基本一样。
NSLog( @"<%p %@:(%d)> %@", \
self, \
[[NSString stringWithUTF8String:__FILE__] lastPathComponent], \
__LINE__, \
[NSString stringWithFormat:(s), ##__VA_ARGS__] )
这句代码中的反斜杠表示换行;
%p 表示取内存地址;
__FILE__ 表示文件所在全路径,lastPathComponent 取最后一个部分,也就是打印log的文件的名字;
__LINE__ 表示log所在文件的行数
## 粘合符号,是宏连接符;__VA_ARGS__是可变参数宏,就是你真正要打印的内容,##粘合了前面的信息(内存地址、文件名和行数)。
以上。