黑马程序员技术交流社区

标题: description 方法的重写 [打印本页]

作者: 泥娃娃    时间: 2016-3-21 09:52
标题: description 方法的重写
14.description     以%@格式打印对象名的时候(NSLog(@“%@”,实例对象名)),调用的是description,默认打印出的结果是对象的地址<Dog: 地址内容>
此处可以重写方法(父类的)

重写description对象方法:
-(NSString *)description{

    NSString *str =[NSString stringWithFormat: @"年龄:%d,颜色:%d",_age,_color];//_age,_color是类的属性
    return str;
或者
    return [NSString stringWithFormat: @"年龄:%d,颜色:%d",_age,_color];

}

重写description类方法
+(NSString *)description{
    //在类方法中不能访问实例变量,因此,下面这句话是错误的
   // return [NSString stringWithFormat: @"年龄:%d,颜色:%d",_age,_color];
return @"这是类方法";

}

调用description类方法
NSLog(@“%@”,[p class]);

注意:千万不要在description方法中同时使用%@和self . 同时使用等于调用了self的description ,因此导致陷入死循环。


作者: muzipiao    时间: 2016-3-21 10:31
+(NSString *)description
-(NSString *)description
重写类方法和对象方法都有什么用?
会重写,但是搞不明白用途
作者: 泥娃娃    时间: 2016-3-21 16:45
muzipiao 发表于 2016-3-21 10:31
+(NSString *)description
-(NSString *)description
重写类方法和对象方法都有什么用?

我觉得要从创建对象的理解开始说起,比如
  1. Car *car = [Car new];
复制代码
理解方式1:定义了一个Car类型的指针,指向了一个新申请的内存空间
理解方式2:用Car类实例化一个实例对象,对象名为car。

对于第二种理解方式,如果打印对象名,想得到对象的属性,因此有了重写description的出现。让打印对象名时输出的是对象的属性。而程序默认的是指针的地址

作者: muzipiao    时间: 2016-3-22 09:15
泥娃娃 发表于 2016-3-21 16:45
我觉得要从创建对象的理解开始说起,比如理解方式1:定义了一个Car类型的指针,指向了一个新申请的内存空 ...

谢谢,那类的方法呢,还没有创建对象实例,类的description有什么用?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2