A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 泥娃娃 中级黑马   /  2016-3-21 09:52  /  1206 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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 ,因此导致陷入死循环。

3 个回复

倒序浏览
+(NSString *)description
-(NSString *)description
重写类方法和对象方法都有什么用?
会重写,但是搞不明白用途
回复 使用道具 举报
muzipiao 发表于 2016-3-21 10:31
+(NSString *)description
-(NSString *)description
重写类方法和对象方法都有什么用?

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

对于第二种理解方式,如果打印对象名,想得到对象的属性,因此有了重写description的出现。让打印对象名时输出的是对象的属性。而程序默认的是指针的地址
回复 使用道具 举报
泥娃娃 发表于 2016-3-21 16:45
我觉得要从创建对象的理解开始说起,比如理解方式1:定义了一个Car类型的指针,指向了一个新申请的内存空 ...

谢谢,那类的方法呢,还没有创建对象实例,类的description有什么用?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马