description和debugDescription在调试程序时使用总结

在调试程序时,通常会用到description和debugDescription来打印对象信息。description主要在NSLog中使用,显示类名和内存地址,而debugDescription在断点使用po命令时显示,两者输出信息相同。自定义类时,可通过重写这两个方法提供更详细的调试信息,如类名、属性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在调试程序时,经常需要打印并查看对象信息:我们经常会使用:

 NSLog(@"object:%@",object)

 在打印时,object会接收description消息:

 NSString *object = @"pp";

 NSLog(@"object:%@",object);

 如果object是个字符串则会输出:

 object:pp

 

 但是如果我们在自定义的类中输出就会输出如下:

 输入

 DebugTest *debug = [[DebugTest alloc]init];

 NSLog(@"object:%@",debug);

 输出

 object:<DebugTest: 0x7fe1c95a1320>

 

 因此对于第二种则不是太有用在我们调试程序时:这里只是输出了类名以及对象的内存地址 为了实现与第一种相同的效果,我们可以采用复写description方法

 假设我们自定义类如下:

 #import "DebugTest.h"

 @interface DebugTest()

 

 @property (nonatomic,strong) NSArray *array;

 @property (nonatomic,copy) NSString *name;

 

 @end

 

 @implementation DebugTest

 -(instancetype)initWithName:(NSString *)name Array:(NSArray *)array{

 if (self == [super init]) {

 _name = name;

 _array = array;

 }

 return self;

 }

 @end

该类的description方法和debugDescription方法可如下定义:

 -(NSString *)description {

 return [NSString stringWithFormat:@"%@--%@--%@",[self class],_name,_array];

 

 }

 -(NSString *)debugDescription{

 return [NSString stringWithFormat:@"%@--%@--%@",[self class],_name,_array];

 }

 这时候输入:

 DebugTest *debug = [[DebugTest alloc]initWithName:@"小李" Array:@[@"H",@"I"]];

 NSLog(@"object:%@",debug);

 输出:

 object:DebugTest--小李--(

 H,

 I

 )

 因此可以实现和我们上面相同的效果,对于descriptiondebugDescription的区别在于

 description:从控制台输出NSLog

 debugDescription:通过断点po打印

 输出信息是一样的

 

 因此如果想在调试时知道比较详细的信息需要实现debugDescription方法

例如:

(lldb) po debug

 DebugTest--小李--(

 H,

 I

 )

 (lldb)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值