@property (readonly, copy) NSString *description;
description是NSObject的一个只读属性,意思就是说一个对象有什么属性,每个属性对应的属性值是什么; 当你在XCode控制台使用po命令打印一个对象的时候,如果没有重写description方法,往往打印出的结果就是“类名+内存地址”,像这样:
而当你想看到对面内部的属性时,就需要再次po命令,十分的麻烦. 下面就提供一种万能的使控制台打印对象出现详细信息的方法:重写description方法
- (NSString *)description{
// warning : 一定要引入头文件 #import <objc/runtime.h>
NSString * desc= [super description];
desc = [NSString stringWithFormat:@"\n%@\n", desc];
unsigned int outCount;
//获取obj的属性数目
objc_property_t *properties = class_copyPropertyList([self class], &outCount);
for (int i = 0; i < outCount; i ++) {
objc_property_t property = properties[I];
//获取property的C字符串
const char * propName = property_getName(property);
if (propName) {
//获取NSString类型的property名字
NSString * prop = [NSString stringWithCString:propName encoding:[NSString defaultCStringEncoding]];
//获取property对应的值
id obj = [self valueForKey:prop];
//将属性名和属性值拼接起来
desc = [desc stringByAppendingFormat:@"%@ : %@,\n",prop,obj];
}
}
free(properties);
return desc;
}
打印结果就是这样啦:.END