iOS为自定义类打印详细信息

2017-05-10  本文已影响368人  mws100

在开发中,我们要建很多模型类来存储格式化数据,但是在输出log的时候,只能打印出类名和内存地址。不会像系统的NSArray或NSDictionary一样打印出详细的 每个属性的值。像下面这段代码,我们自定义一个WSModel类,它有name、height两个属性。

@interface WSModel : NSObject

@property (nonatomic, copy) NSString *name;

@property (nonatomic, assign) CGFloat height;

@end

我们创建WSModel的一个对象,并打印。

WSModel *model = [[WSModel alloc] init];
model.name = @"Tom";
model.height = 180.f;
NSLog(@"model = %@", model);

输出是这样的:

model = <WSModel: 0x60000003f2a0>

可以看到name,height的值并没有打印出来。
再打印个NSDictionary看看:

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"Tom", @"name", @(180.f), @"height", nil];
NSLog(@"dic = %@", dic);

打印是这样的:
dic = {
    height = 180;
    name = Tom;
}

那怎么让自定义对象,既打印出地址 又打印出各属性值呢?答案是覆写自定义类的description方法。如下:

@implementation WSModel

- (NSString *)description {
    return [NSString stringWithFormat:@"<%@: %p, %@>",
            [self class],
            self,
            @{@"name":_name,
              @"height":@(_height)
              }
            ];
}

@end

此时再看下新建对象的打印:

model = <WSModel: 0x60000003e9e0, {
    height = 180;
    name = Tom;
}>

我们在把类名和指针地址按照系统默认格式打印,再把所有的属性包装到一个字典里,便于以后扩展。如果新增一个属性,就在字典中加个key value即可。
很简单,不提供Demo了。如果帮到了你,请点击喜欢❤️

上一篇 下一篇

猜你喜欢

热点阅读