美文网首页
(转)NSLog重写--宏定义

(转)NSLog重写--宏定义

作者: cdd48b9d36e0 | 来源:发表于2016-10-20 14:28 被阅读36次

    文/iOneWay(简书作者)
    原文链接:http://www.jianshu.com/p/acbe5e5c59e4
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

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

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

    首先请确保参数设置正确
    <img>


    187415-3a94597be5081682.png

    然后添加如下代码:

    //重写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
    

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

    使用范例及效果:

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

    <img>


    187415-75cf16a91783b94e.png

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

    相关文章

      网友评论

          本文标题:(转)NSLog重写--宏定义

          本文链接:https://www.haomeiwen.com/subject/hqvfuttx.html