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

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

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

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,317评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,286评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,812评论 25 709
  • 01. 当双溪孤孤单单抱着小熊坐在家门口的台阶上时,十六岁的格瑞背着书包经过,他的口袋里掉出一张过期的电影票,上面...
    犹岸阅读 529评论 0 2
  • 以archlinux为例,有些步骤省略了,适合有一定基础的人。 1.从github上下载驱动 git clone ...
    kgyy阅读 1,520评论 0 0