前言
大家好,我是milo,这篇文章讲的是description,oc中一个较少用到,但比较好用的东西。
背景
在开发中进行调试时,如果我们想通过NSLog输出一个类的成员的信息,往往使用如下:
NSLog(@"Age:%d, Name:%@", [person age], [person name]);
但是这样做毕竟不方便,每次要格式化输出类的所有信息时,都要重复写一遍上面的格式化代码。最好的方法就是,我们重写类的description方法。为什么要重写description方法呢?因为重写过后我们就可以像下面这样子使用,打印想要的信息。
NSLog(@"%@",person);
只需要一段代码就可以像上面那段代码一样输出想要的信息,所以十分地简洁。当调试的地方比较多的时候就更加能体现其优越性。
如何实现
当我们像 NSLog(@"%@",person); 这样去打印一个对象的信息的时候,对象会寻找自身的description方法,当子类没有重写description的时候就会在父类NSObject中寻找,而NSObject中默认description方法是打印如下信息:
2018-05-08 23:45:00.936964+0800 oc练习[1709:152079] <Person: 0x100620c50>
所以我们只需要在子类的重写description方法就,让子类有一个重写的descripition方法就行了,示例如下:
#import "JJPerson.h"
@implementation JJPerson
-(NSString *)description {
return [NSString stringWithFormat:@"Age:%ld, Name:%@",(long)_age,_name];
}
@end
是不是非常简单~只需要将需要格式化输出的信息,封装到description的内部,就可以了。
接下来看看是不是做到了一行代码NSLog(@"%@",person); 就能打印description里面格式化后信息。
截图.png
成功~
-----------------------------分割一下-----------------------------
description方法不仅仅只有对象方法,他还有类方法,也就是我们可以采取像上面一样的思路,一句代码打印所需要的类的信息,只不过打印的时候是 NSLog(@"%@",[JJPerson description]); 大家可以自己去尝试尝试,下面上个图。
重写description类方法.png
打印结果.png
网友评论