码迷,mamicode.com
首页 > 移动开发 > 详细

iOS调试技巧之打印输出 -----A: (NSString *)description B:自定义LOG C:使用第三方插件快速打印

时间:2015-11-07 14:43:21      阅读:487      评论:0      收藏:0      [点我收藏+]

标签:

A:重写- (NSString *)description函数

如果有一个Product 产品对象 

Product.h中

 1 #import <Foundation/Foundation.h>
 2 
 3 typedef enum : NSUInteger {
 4     RED = 1,
 5     GREEN,
 6 } ProductColor;
 7 
 8 @interface Product : NSObject
 9 
10 @property (nonatomic, assign) ProductColor color;
11 @property (nonatomic, assign) float weight;
12 
13 @end

 Product.m中

 

#import "Product.h"

@implementation Product

//重写description方法
-(NSString *)description
{
    return [NSString stringWithFormat:@"%@, %@",@(_color), @(_weight)];
}
@end

 

 

结果比较

    Product *product = [[Product alloc] init];
    product.color = 1;
    product.weight = 120;
    
    // 重写description打印输出对象的属性值
    NSLog(@"重写description打印输出%@",product);
    // 2015-11-07 13:27:25.956 WriteLeanPrograms[650:138469] 重写description打印输出1, 120

    // 不重写description打印输出对象的指针
    NSLog(@"不重写description打印输出%@",product);
    //2015-11-07 13:28:20.035 WriteLeanPrograms[654:138882] 不重写description打印输出<Product: 0x13f529ff0>

 

 其实就是一句话:重写description输出对象的属性值  不重写decription方法输出的时对象的指针地址

 

 

 

B:自定义LOG

在程序调试

任 何由NSLog输出的内容都会成为成品代码的一部分,也就是说会被任何接触到应用的人看到。只要把设备接入信息管理工具,每个人都能查看控制台信息并查 询每一条日志记录。没错,这必然会引发一系列严重后果。试想一下,如果我们曾经向控制台输出过机密逻辑算法或者者用户密码,这些信息一旦被他人获得将带来 恶劣影响。有鉴于此,苹果公司会在App Store的审核流程中检测控制台信息。一旦发现其中包含太多输出结果,应用程序将被直接打回开发者处进行调整 ,使用自定义的LOG在发布的时候自动取消打印,只在调试的时候打印信息,还可以看出打印结果属于哪一个文件的哪一个函数,哪一行是不是很方便发布app版本的时候就不会打印了,提高了性能 发布的时候不需要去设置debug =0,xcode 使用发布证书打包时自动设置debug = 0,

这段代码

#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)

NSLog的高级解决方案

虽然NSLog表现卓越,但其局限性也不可忽视:它只能向本地输出结果;

  • 我们无法为其添加日志“等级”(例如严重、警告等等);
  • NSLog速度很慢。在进行大量处理时它会严重拖慢应用程序的运行效果。

对于想给自己来点挑战的开发者来说,还有两款框架能够回避NSLog的短板——但前辈是大家得有足够的时间和精力投入其中。下面来看这两款个人推荐:

Cocoa LumberJack

     –一款专为Cocoa打造的知名通用型日志框架,学习起来略困难但功能非常强大。
  • SNLog –NSLog的替换方案之一。

 

C:使用第三方插件快速打印对象

使用第三方插件快速打印也是很不错的方案

不用重写Drscription,直接打印对象,打印frame size  等等,觉得是一个不错的调试打印工具

https://github.com/DeveloperLx/LxDBAnything 

 

 

iOS调试技巧之打印输出 -----A: (NSString *)description B:自定义LOG C:使用第三方插件快速打印

标签:

原文地址:http://www.cnblogs.com/ios-wang/p/4944953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!