NSLog重写--宏定义

在运行应用时候,我们可能会加入一些打印信息来帮助我们跟踪应用的运行信息。可是过多的NSLog是非常耗费性能的,在Debug模式下我们需要打印这些信息以供找出bug,但是在用户使用时是不需要打印太多信息的,这里有两个原因:一方面是因为耗费手机性能;另一方面会泄漏一些敏感信息。所以为了解决以上问题我门需要做以下修正:

1,屏蔽Release模式下的打印信息
2, 增强NSLog的功能,得到更多的有用信息

如下代码:

//重写NSLog,Debug模式下打印日志和当前行数
#if DEBUG

#define NSLog(format, ...) do {                                             \
fprintf(stderr, "<%s : %d> %s\n",                                           \
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],  \
__LINE__, __func__);                                                        \
(NSLog)((format), ##__VA_ARGS__);                                           \
fprintf(stderr, "-------\n");                                               \
} while (0)
#define NSLogRect(rect) NSLog(@"%s x:%.4f, y:%.4f, w:%.4f, h:%.4f", #rect, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height)
#define NSLogSize(size) NSLog(@"%s w:%.4f, h:%.4f", #size, size.width, size.height)
#define NSLogPoint(point) NSLog(@"%s x:%.4f, y:%.4f", #point, point.x, point.y)
#else
#define NSLog(FORMAT, ...) nil
#define NSLogRect(rect) nil
#define NSLogSize(size) nil
#define NSLogPoint(point) nil
#endif

#endif

在使用以上代码前,请确保参数设置正确

EC6CCD.png

这里的DEBUG即为以上代码中的条件"DEBUG", 两者必须一致。

使用范例及效果:

NSLog(@"self.window = %@", self.window);
NSLog(@"self.window.rootViewController = %@", self.window.rootViewController);
222.png

打印出了文件名,行号,函数名称等重要信息。并以"------"作为分隔符。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,432评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,370评论 0 6
  • Day12周二20160105 今天一整天都泡在了自修室,中午也没有回去,让同学吃完饭打包过来。明天就要考试了,然...
    浅格调阅读 424评论 0 0
  • 我总觉得我十分缺钱,可能是从小缺乏安全感吧,我总想要很多很多的钱。当然虽然我渴望它,但我不会去为它做一些超出底线的...
    梦想养只猫阅读 253评论 0 0