接口与API设计--17:description方法

2023-11-22 08:22:22 浏览数 (1)

describe

代码语言:javascript复制
 Phone *p = [[Phone alloc]initWithName:@"iPhone" withPrice:999];
 NSLog(@"%@",p);

一般我们答应出来的内容 <Phone: 0x60400022dd00> 为了方便调试打印更多信息,我们需要在Phone类中重写describe方法

代码语言:javascript复制
- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@:%p "%@">", [self class],self,
            @{@"_name":_name,
              @"_price":@(_price)
              }];
}

Phone *p = [[Phone alloc]initWithName:@"iPhone" withPrice:999];
NSLog(@"%@",p);

这样我们得到的信息会很详细,打印信息为:<Phone:0x600000238ae0 "{ "_name" = iPhone; "_price" = 999; }">

debugDescribe

debugDescribe方法主要是开发者在调试器中以控制台命令"po"打出对象时才调用,在debugDescribe方法里可以添加你认为调试必要的一些内容

在此处打断点,这时通过控制台可以打印出:

demo

没有重写debugDescription

当你重写debugDescribe方法

代码语言:javascript复制
- (NSString *)debugDescription
{
    return [NSString stringWithFormat:@"<%@: %p> %@", [self class], self,
                @{@"_name":_name,
                  @"_price":@(_price),
                  @"more info":@"XXXXX"
                  }];
}

在控制台打印的信息为

重写debugDescription

参考

Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法

0 人点赞