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

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

1、description和debugDescription是什么

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

咱们先来看声明部分的代码:学习

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

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

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

咱们写以下的测试代码:atom

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

控制台输出的信息以下:spa

能够看到,方法的实现大体是这样的:debug

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

3、重写description方法

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

Text.hcode

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

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

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

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

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

4、description与debugDescription的区别

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

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

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

 

学习使用 欢迎转载

专一技术,热爱生活,交流技术,也作朋友。

——珲少 QQ群:203317592

相关文章
相关标签/搜索