博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【OC梳理】description
阅读量:6758 次
发布时间:2019-06-26

本文共 1602 字,大约阅读时间需要 5 分钟。

iOS中,使用NSLog输出NSObject对象时常使用%@修饰,其输出结果一般类似:

复制代码

这样的输出并没什么鸟用,如果想让输出的结果更加清晰,可以在子类中重写- (NSString *)description;方法,返回想要输出的信息,例如:

// ...@property (nonatomic, copy, readonly) NSString * name;@property (nonatomic, copy, readonly) NSString * address;// ...- (NSString *)description{    return [NSString stringWithFormat:@"<%@ : %p, \"%@ %@\">", [self class], self, _name, _address];}复制代码

使用NSLog输出该对象:

... 
复制代码

或者我们可以将属性放到NSDictionary中,让输出更加清晰:

// ...- (NSString *)description{    return  [NSString stringWithFormat:@“%@-> %p: \n%@”, [self class], self, @{@"name":_name,                    @"address":_address}];}复制代码

输出结果为:

Object:-> 0x123456789:{    name = _name;    address = _address;}复制代码

如果我们更懒一点,使用runtime遍历属性进行输出:

// ...#import 
// ...- (NSString *)description{ unsigned int count ,i; objc_property_t *propertyArray = class_copyPropertyList([self class], &count); NSMutableDictionary *mutDic = [NSMutableDictionary dictionary]; for (i = 0; i < count; i++) { objc_property_t property = propertyArray[i]; NSString *proKey = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; id proValue = [self valueForKey:proKey]; if (proValue) { [mutDic setObject:proValue forKey:proKey]; } else { [mutDic setObject:@"" forKey:proKey]; } } free(propertyArray); return [NSString stringWithFormat:@"%@: %p, \n%@", [self class], self, mutDic];}复制代码

同时,我们在debugDescription中实现相同的代码,以便于调试时使用po命令输出相同的结果。

转载于:https://juejin.im/post/5bcda0ca6fb9a05d1a1312c5

你可能感兴趣的文章
前端框架的区别,优缺点。
查看>>
oracle中使用sql语句创建表空间、用户、授权及使用命令导入导出
查看>>
layout中加载gif图片
查看>>
::符号
查看>>
“零甲醛”真的无污染?美博士环保开展调研
查看>>
unity博客 推荐(不断补充)
查看>>
图形处理的一些知识
查看>>
XPath
查看>>
[转]Shell脚本中获取SELECT结果值的方法
查看>>
No.2----数据类型(常用的)
查看>>
字符串指针
查看>>
锐捷网关交换机开启dhcp服务
查看>>
android 窃听电话
查看>>
链表例题
查看>>
POJ-1321 棋盘问题 搜索
查看>>
HDU-4478 Where is the King 搜索
查看>>
将博客搬至CSDN
查看>>
大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1....
查看>>
在ie9浏览器中ajax请求数据始终执行error的问题解决
查看>>
类和原型之工厂模式!
查看>>