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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangchao1992 中级黑马   /  2015-8-15 17:44  /  466 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangchao1992 于 2015-8-15 17:51 编辑

需求:当我们以%@格式打印 对象的时候,输出对象的所有的属性信息,就可以使用description方法
          description方法NSObject父类里已经有了,我们只需要把它重写就可以使用。
         description方法 有类方法和对象方法。满足需求只能使用对象方法。
description陷阱; 千万不要在description方法中同时使用%@和self。
使用方法
   Dog *d = [Dog new];
        [d setAge:3];
        d->_color  = 1;
         //查看对象地址
        NSLog(@"\n d = %p",d);
        //类名    对象的地址
         //需求:
        //当我们以%@格式打印 对象的时候,输出对象的所有的属性信息
        NSLog(@"\n%@",d); //打印d的对象
       //当我们以%@的格式,打印了对象d,此时调用了对象的description方法
        //对象中如果没有重写父类的description方法,则调用父类的
        

       //打印类的信息
        //打印类
        //[d class]; ---->Dog
        //以%@的形式,打印类信息
        NSLog(@"\n%@ ",[d class]);

@implementation Dog
-(void)setAge:(int)age{
   _age = age;
}
-(int)age{
   return _age;
}
-(void)run{
   NSLog(@"狗在跑");
}
//重写父类的description
-(NSString *)description{  
    return [NSString stringWithFormat:@"年龄:%d,颜色:%d",_age,_color];
}
//重写description的类方法
+(NSString *)description{
       //在类方法中不能访问实例变量,所以下面的写法是错误的
      //    return [NSString stringWithFormat:@"年龄:%d,颜色:%d",_age,_color];
    return @"这是类方法";
}
@end

1 个回复

倒序浏览
嗯嗯   不错  收藏了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马