九:description方法

一、基本含义

1、当用%@打印类或对象时候,系统内部默认就会调用 description方法,拿到返回值进行输出,默认输出的是返回类名和对象的内存地址。

其实%@的本质是用于打印字符串.

调用该方法, 该方法会返回一个字符串, 字符串的默认格式 <类的名称: 对象的地址>

2、代码:

 1 #import <Foundation/Foundation.h>
 2 @interface Animal: NSObject
 3 /** 颜色 */
 4 @property (strong, nonatomic)NSString *color;
 5 @end
 6 @implementation Animal
 7 @end
 8 
 9 int main(int argc, const char * argv[]) {
10     @autoreleasepool {
11         Animal *a = [[Animal alloc] init];
12         a.color = @"green";
13         NSLog(@"%@",a);  //打印对象a 
14     }
15     return 0;
16 }

输出结果:

1 2016-04-27 07:55:42.250 description[4955:864017] <Animal: 0x1006000a0>
2 Program ended with exit code: 0

二、重写description

description方法的默认实现是返回类名和对象的内存地址,这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关心的是对象内部的一些成变量的值。因此,会经常重写description方法,返回对象的属性,覆盖description方法的默认实现。

代码:

#import <Foundation/Foundation.h>
@interface Animal: NSObject
/** 颜色 */
@property (strong, nonatomic)NSString *color;
@end
@implementation Animal
- (NSString *)description
{
    return [NSString stringWithFormat:@"color:%@",_color]; //此处的_color决不能写成self,否则会造成死循环
}
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Animal *a = [[Animal alloc] init];
        a.color = @"green";
        NSLog(@"%@",a);  //这时候打印的就是对象的属性
    }
    return 0;
}

输出结果:

2016-04-27 08:09:42.105 description[4983:875363] color:green
Program ended with exit code: 0

 

注意:如果在description方法中利用%@输出self会造成死循环

 

posted @ 2016-04-27 08:10  hissia  阅读(357)  评论(0编辑  收藏  举报