description与NSLog()

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 的实现,输出对象的首地址。


3.

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 的实现,输出对象的首地址。如果自己实现,就调用自己实现的。





你可能感兴趣的:(description)