第17条:实现description方法

调试程序时,需要打印并查看对象信息,

NSLog(@"objeect = %@",object);

说明:
在构建需要打印到日志的字符串时,object对象会收到description消息,该方法所返回的描述信息将取代“格式字符串”里的“%@”。
// 数组对象:
NSArray *object = @[@"a string", @123];
NSLog(@"objeect = %@",object);

输出:
objeect = (
    "a string",
    123
)
// 自定义对象 输出:
objeect = 
//  一般可以这样覆写某个类的description方法:
- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p, \"%@ %@\">", [self class], self, _firstName, _lastName];
}

打印类实例对象,输出:
objeect = 

应根据当前对象来决定在description方法里打印何种信息。
把待打印的信息放到字典里面,然后将字典对象的description方法所输出的内容包含在字符串里并返回。

// 借助字典 覆写description方法:
- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p, %@>", [self class], self, @{@"firstName" : _firstName, @"lastName" : _lastName}];
}

输出:
objeect = 

debugDescription方法与description方法非常相似,debugDescription方法是开发者在调试器中以控制台命令打印对象时才调用。在NSObject类的默认实现中,此方法只是直接调用了description。

// 覆写:
- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@>",@{@"firstName" : _firstName, @"lastName" : _lastName}];
}

- (NSString *)debugDescription
{
    return [NSString stringWithFormat:@"<%@: %p, %@>", [self class], self, @{@"firstName" : _firstName, @"lastName" : _lastName}];
}

打印对象,调用description输出:
objeect = <{
    firstName = bob;
    lastName = smith;
}>
打断点,控制台po命令,调用debugDescription输出:

你可能感兴趣的:(第17条:实现description方法)