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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 翟宇浩 中级黑马   /  2015-9-7 10:52  /  722 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 翟宇浩 于 2015-9-7 11:11 编辑

如:
@interface Dog :NSObject
-(void)run;
@end
@implementation Dog
-(void)run{
    NSLog(@"奔跑");
}
@end

Dog *d = [[Dog alloc] init];
NSLog(@"%@",d);
此时打印的结果为   <Dog: 0x1001002e0> ,此时系统调用的就是  descriotion 的方法
我们可以在@impelementation中对description方法进行重写,如:
-(NSString *)description{
    return @"你好";
}
此时再执行
NSLog(@"%@",d); 时,就会打印
你好
当我们以%@的格式打印了对象d,此时调用了对象的description方法,对象中如果没有重写父类的description方法,则调用父类

如果我们重写 description的类方法,则:
+(NSString *)description{
     return @"类方法";
}
调用的写法为:
NSLog(@"%@",[d class]);
此时[d class]即为Dog ,由于这里不能写类名,所以用[d class]代替类名,打印结果为:
类方法

description使用陷阱:
千万不要在description方法中同时使用%@和self,比如:
-(NSString *)description{
     return [NSString stringWithFormat:@"%@",self];
}
同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法。

2 个回复

倒序浏览
很详细~!
回复 使用道具 举报
description重写的要点和陷阱都说的很详细,不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马