在开发中,我们要建很多模型类来存储格式化数据,但是在输出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了。如果帮到了你,请点击喜欢❤️