调试程序时,需要打印并查看对象信息,
NSLog(@"objeect = %@",object);
说明:
在构建需要打印到日志的字符串时,object对象会收到description消息,该方法所返回的描述信息将取代“格式字符串”里的“%@”。
// 数组对象:
NSArray *object = @[@"a string", @123];
NSLog(@"objeect = %@",object);
输出:
objeect = (
"a string",
123
)
// 自定义对象 输出:
objeect = <EOCPerson: 0x1d003d140>
// 一般可以这样覆写某个类的description方法:
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p, \"%@ %@\">", [self class], self, _firstName, _lastName];
}
打印类实例对象,输出:
objeect = <EOCPerson: 0x1d022b0e0, "bob smith">
应根据当前对象来决定在description方法里打印何种信息。
把待打印的信息放到字典里面,然后将字典对象的description方法所输出的内容包含在字符串里并返回。
// 借助字典 覆写description方法:
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p, %@>", [self class], self, @{@"firstName" : _firstName, @"lastName" : _lastName}];
}
输出:
objeect = <EOCPerson: 0x1d4222b40, {
firstName = bob;
lastName = smith;
}>
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输出:
<EOCPerson: 0x1d00278e0, {
firstName = bob;
lastName = smith;
}>