iOS description与debugDescription在调试程序中的应用

iOS 中打印函数description与debugDescription的应用

一、description和debugDescription是什么

        description和debugDescription是NSObject协议中的声明的两个方法,同时NSObject类也实现了这个方法,如果子类没有重写,则会调用父类的description和debugDescription方法。首先,这两个方法适用于程序代码的调试的,当我们调用打印Log时,会向对象发送一个这样的消息。

我们先来看声明部分的代码:

+ (NSString *)description;
+ (NSString *)debugDescription;

这里返回的字符串就是我们打印在控制台显示的信息。

二、NSObject基类中的description方法是如何实现的

我们写如下的测试代码:

 NSObject * objc = [[NSObject alloc]init];
 NSLog(@"objc:%@",objc);

控制台输出的信息如下:

可以看到,方法的实现大致是这样的:

-(NSString *)description{
    return [NSString stringWithFormat:@"<%@:%p>",[self class],&self];
}

三、重写description方法

通过上面的介绍,我们大致知道description方法的原理了,在程序调试时,我们可以充分利用这个方法带来的便利,大大缩减我们调试程序所需要的时间。例如:创建一个Test类,给它定义两个属性如下:

Text.h

#import <Foundation/Foundation.h>
@interface TestObject : NSObject
@property(nonatomic,strong)NSString  * name;
@property(nonatomic,strong)NSString  * age;
@end

我们在.m文件中将description方法重写:

#import "TestObject.h"
@implementation TestObject
-(NSString *)description{
    return [NSString stringWithFormat:@"%@",@{@"name":_name,@"age":_age}];
}
@end

重写的方法将Test类对象的属性打印了出来,这时我们在调用NSLog函数时,打印结果如下:

是不是很炫酷,如此一来,我们可以将我们基本不会用到的类名和地址转换成打印数据,极大的方便了我们代码的调试工作。

四、description与debugDescription的区别

这两个方法的区别仅仅在于调试的位置不同,调用不同的函数。description是我们在程序中打Log会调用的方法,debugDescription则是我们在断点调试时,在控制台使用po命令打印会调用的方法,比如我们重写Test类的这个方法:

-(NSString *)debugDescription{
    return [NSString stringWithFormat:@"<%@:%p>:%@",[self class],&self,@{@"name":_name,@"age":_age}];
}

然后我们在程序中加个断点运行,在程序断掉之后,我们在调试区输入:po text,回车之后,会出现如下的信息:

学习使用 欢迎转载

专注技术,热爱生活,交流技术,也做朋友。 ——珲少 QQ群:203317592

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏儿童编程

我不是算命先生,却对占卜有了疑惑——如何论证“占卜前提”的正确与否

事出有因,我对《周易》感兴趣了很多年。只是觉得特别有趣,断断续续学习了一些皮毛。这几天又偶然接触到了《梅花易数》,觉得很是精彩,将五行八卦天干地支都串联了起来。...

15110
来自专栏儿童编程

一张图理清《梅花易数》梗概

学《易经》的目的不一定是为了卜卦,但是了解卜卦绝对能够让你更好地了解易学。今天用一张思维导图对《梅花易数》的主要内容进行概括,希望能够给学友们提供帮助。

31840
来自专栏非著名程序员

「我真的没有改需求」

11910
来自专栏非著名程序员

这是对付产品经理的一副毒药,程序员慎入

程序员和产品经理的日常就像是一对天生的冤家,为了需求的实现,几乎天天在争吵。这不,就在昨天各大技术和产品群里一个程序员暴打产品经理的视频火了,被广泛传播。

12420
来自专栏腾讯NEXT学位

今天我就说三句话

11620
来自专栏华章科技

穿越十年后看互联网+:家电行业的金矿在哪里?

现在市场上炒得火热的智能家居未来出路在何方?做智能家居的创业者应该注意哪些机会?传统家电厂商又到底如何借助互联网进行转型?本文以智能空调为例,用故事的形式,提前...

8310
来自专栏web前端教室

你可以从面试中学到什么?

讲一下我对面试的一些。。。“偏见”,哈哈,熟悉我的同学们一定要批判的读接下来的内容哈。

12100
来自专栏haifeiWu与他朋友们的专栏

复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

29640
来自专栏Ken的杂谈

【系统设置】CentOS 修改机器名

18030
来自专栏FSociety

SQL中GROUP BY用法示例

GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

5.1K20

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励