1、
Person * p=[[Person alloc]init];
NSLog(@"%@",p);
NSLog(@"------");
NSLog(@"%@",[p description]);
编译结果
2015-05-29 20:57:32.412 123[1020:303] <Person: 0x100201aa0>输出对象首地址
2015-05-29 20:57:32.414 123[1020:303] ------
2015-05-29 20:57:32.415 123[1020:303] <Person: 0x100201aa0>输出对象首地址
Program ended with exit code: 0
说明NSLog(@"%@",p)就是在调用[p description]方法,说明NSLog(@"%@",p)等价于NSLog(@"%@",[p description]);NSLog 输出对象用的格式化字符串是%@,就是在调用description方法
2、
Person * p=[[Person alloc]init];
NSLog(@"%@",p);
NSLog(@"------");
NSLog(@"%@",[p description]);
-(NSString *)description
{
return [super description];调用父类即NSObject的方法
//return (@"=========");
}
编译结果
2015-05-29 20:57:32.412 123[1020:303] <Person: 0x100201aa0>输出对象首地址
2015-05-29 20:57:32.414 123[1020:303] ------
2015-05-29 20:57:32.415 123[1020:303] <Person: 0x100201aa0>输出对象首地址
Program ended with exit code: 0
如果我们不实现自己的description,那么会调用NSObject 的实现,输出对象的首地址。
Person * p=[[Person alloc]init];
NSLog(@"%@",p);
NSLog(@"------");
NSLog(@"%@",[p description]);
-(NSString *)description
{
[super description];
return (@"=========");
}
编译结果
2015-05-29 21:03:06.385 123[1073:303] =========
2015-05-29 21:03:06.387 123[1073:303] ------
2015-05-29 21:03:06.387 123[1073:303] =========
Program ended with exit code: 0
即重写了NSObject的description方法,就按重写的输出
综上所述:如果我们不实现自己的description,那么会调用NSObject 的实现,输出对象的首地址。如果自己实现,就调用自己实现的。