一、概述
NSLog 函数
打印信息是 IOS 开发中最简单的代码调试方法,但是 NSLog 本身的性能很差,程序发布后,不应该保留这些用于调试的 NSLog,但是手动删除又很麻烦。
Debug模式下输出日志,Release模式下自动屏蔽日志输出。通过宏定义实现。
二、解决办法
在 PCH 文件中添加一个宏,来替换系统默认的 NSLog,下面的方法都可以试下。
代码如下:
#ifndef __OPTIMIZE__
#define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define DLog(...)
#endif
或者
#ifdef DEBUG
# define DHLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DHLog(...);
#endif
或者
#ifdef __OBJC__ //保证代码只会在OC中引用
#ifdef DEBUG
#define NSLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define NSLog(...)
#endif
#endif
三、解释:
1.__OPTIMIZE__
:在Debug模式下,才会有此宏定义。意思就是在优化的过程中,即Debug模式。
-
__PRETTY_FUNCTION__
:通过PRETTY_FUNCTION可以打印出Log所在类名-函数。 -
__LINE__
:标识符_ _ LINE _ _的内容是当前被编译代码行的行号。