在开发过程中, 往往会有很多的model来装载属性. 而在开发期间经常会进行调试查看model里的属性值是否正确. 那么问题来了, 在objective-c里使用NSLog(“%@”,model)这行代码打印出来的却是model的地址. 不是我们所想要的结果~!
有没有办法解决这个问题尼,答案那就是有~!只需要重写- (NSString *)description方法即可。
如下代码:
|
|
这时候在使用NSLog(“%@”,model)这行代码就能打印我们想要的结果了。
那么问题继续来了…
如果model里有N多个属性尼, 可能10个, 可能20个… 难道要在description方法里一个一个写属性并拼接返回? 你不嫌麻烦, 我光看着都蛋疼了… 所以我们可以采用runtime技术来动态获取属性并返回. 如下修改后的.m文件代码:
|
|
// 重写debugDescription, 而不是description
(NSString )debugDescription {
//声明一个字典
NSMutableDictionary dictionary = [NSMutableDictionary dictionary];//得到当前class的所有属性
uint count;
objc_property_t *properties = class_copyPropertyList([self class], &count);//循环并用KVC得到每个属性的值
for (int i = 0; i<count; i++) {objc_property_t property = properties[i]; NSString *name = @(property_getName(property)); id value = [self valueForKey:name]?:@"nil";//默认值为nil字符串 [dictionary setObject:value forKey:name];//装载到字典里
}
//释放
free(properties);//return
return [NSString stringWithFormat:@”<%@: %p> – %@”,[self class],self,dictionary];
}
```
这就达到了我们想要的效果, 如果需要打印model的属性, 打个断点然后使用po命令即可