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,回车之后,会出现如下的信息:

学习使用 欢迎转载

时间: 2024-10-11 22:39:33

IOS description与debugDescription在调试程序中的应用的相关文章

iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握. expression:表达式assignable:赋值variable:变量redefinition:重复定义type:类型conflicting:冲突项invalid:无效的conversion:转换specifier:说明符indent:缩进operands:运算对象.操作数binary:二

iOS description

description:重写对象的这个方法,会在打印的时候显示出自定义的description中的内容debugDescription:方法是在开发者在调试器中以控制台命令打印对象时才调用的. 在NSObject类的默认实现中,NSLog打印是只是直接调用了description,debugDescription是通过命令来调用的,如: 现在有个SomeObject类,它重写了description和debugDescription方法: @implementation SomeObject -

iOS开发OC基础:OC中的分类(类目)

//分类,category,(类目) //为没有源代码的类添加方法 //一定要注意,只能添加方法,不能添加实例变量 /** *  分类 类的定义也是分为接口部分和实现部分 接口部分:以@interface开头 + 类名 后跟小括号,小括号内填写的是分类名 @end结束 在@interface 与@end 之间添加方法. */ //分类为原类添加的方法,就相当于原类具有该方法,可以正常调用 因为涉及到几个分类的创建,所以就直接上传代码了,其实代码也不多,只是怕大家在建立分类的时候会混淆,所以直接把

iOS开发OC基础:OC中的协议

1.协议是一种为有源代码的类扩充方法的方式. 2.协议只是一系列方法的生命,就相当于一张任务清单,规定了要做的事情,但是具有的实施(也就是实现),是由服从该协议的类来实现.所以协议只有.h文件,并且不可以定义变量 3.协议的定义是以@protocol开头, + 协议的名字 <>(表示服从的协议)服从的协议写在<>之内,多个协议之间通过逗号来进行分隔,父协议中的内容就相当于子协议也具有这些内容,以@end结束. 下面的附件是协议的一个小例子,可以加深大家对协议的理解,看完之后一定要多

iOS Dev (60) 怎样实现 UITextView 中的 placeHolder

iOS Dev (60) 怎样实现 UITextView 中的 placeHolder 作者:阿锐 地址:http://blog.csdn.net/prevention - 跟着你的 UITextView 定义一个 UILabel. UILabel *inputPlaceHolder; placeHolder 是当有内容时不显示.无内容时显示.所以能够为所在的实例相应的类实现 UITextViewDelegate 中例如以下方法. - (void)textViewDidChange:(UITex

文顶顶 iOS开发UI篇—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI篇—在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不到对象. 二.ImageView中添加按钮(1)ImageView和Button的比较 Button按钮的内部可以放置多张图片(4),而Ima

IOS开发UI基础—在UIImageView中添加按钮以及Tag的参数说明

ios开发UI基础-在ImageView中添加按钮以及Tag的参数说明 一.tag参数 一个视图通常都只有一个父视图,多个子视图,在开发中可以通过使用子视图的tag来取出对应的子视图.方法为Viewwithtag: 提示点:在xib中如果想要通过tag参数获取对应的控件(属性),不要把tag的参数设置为0,因为xib中所有的对象默认tag都为0,设置为0取不到对象. 二.ImageView中添加按钮(1)ImageView和Button的比较 Button按钮的内部可以放置多张图片(4),而Im

iOS图片加载到内存中占用内存情况

我的测试结果: 图片占用内存   图片尺寸           .png文件大小 1MB              512*512          316KB 4MB              1024*1024      940KB 16MB            2048*2048      2.5MB 1.11MB         512*568 693KB          320*568          186KB 2.773MB       640*1136        664

iOS流布局UICollectionView系列七——三维中的球型布局

摘要: 类似标签云的球状布局,也类似与魔方的3D布局 iOS流布局UICollectionView系列七--三维中的球型布局 一.引言 通过6篇的博客,从平面上最简单的规则摆放的布局,到不规则的瀑布流布局,再到平面中的圆环布局,我们突破了线性布局的局限,在后面,我们将布局扩展到了空间,在Z轴上进行了平移,我们实现了一个类似UIPickerView的布局模型,其实我们还可以再进一步,类比于平面布局,picKerView只是线性排列布局在空间上的旋转与平移,这次,我们更加充分了利用一下空间的尺寸,来