黑马程序员-description的重写
2015-10-23 05:16
471 查看
OC中NSlog方法除了可以输出基本数据类型,NSLog函数还可以输出任何OC对象。
如果我们使用NSlog来打印一个对象,比如:
这时候的输出是:<People: 0x100201f50>,此时输出调用了父类,也就是NSObject的description方法,如果我们想要让他能够正确的输出我们所需要的内容的话,我们可以在People类中重写父类中的description方法。
比如:
这时候的输出是:姓名是:xingm 这就是我们想要的结果。
在重写description的过程中要特别注意,NSObject中有两个description方法,一个类方法,一个对象方法,如果我们把刚才代码中重写description的-变为+,那么就会出错,因为在类方法中是无法访问成员变量的。
而类方法description重写之后,我们修改代码,将输出变为[p class],我们可以看到,输出是:leiming。不再是people。代码如下:
最后我们需要特别注意的是:
千万不要在description方法中同时使用%@和self,下面的写法是错误的:
-(NSString *) description{
return [NSString
stringWithFormat:@"姓名是%@",self];
}
第2行同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法
如果我们使用NSlog来打印一个对象,比如:
这时候的输出是:<People: 0x100201f50>,此时输出调用了父类,也就是NSObject的description方法,如果我们想要让他能够正确的输出我们所需要的内容的话,我们可以在People类中重写父类中的description方法。
比如:
这时候的输出是:姓名是:xingm 这就是我们想要的结果。
在重写description的过程中要特别注意,NSObject中有两个description方法,一个类方法,一个对象方法,如果我们把刚才代码中重写description的-变为+,那么就会出错,因为在类方法中是无法访问成员变量的。
而类方法description重写之后,我们修改代码,将输出变为[p class],我们可以看到,输出是:leiming。不再是people。代码如下:
最后我们需要特别注意的是:
千万不要在description方法中同时使用%@和self,下面的写法是错误的:
-(NSString *) description{
return [NSString
stringWithFormat:@"姓名是%@",self];
}
第2行同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法
相关文章推荐