高效编写代码的方法(十四):Description

2016-05-24  本文已影响59人  蜂猴

Description

关于*- (NSString )description;方法,应该使用的还是比较频繁的。
简单介绍一下:
这个方法在所有NSObject类会有一个默认的实现,具体表现在于每当我们使用
NSLog(@"%@",someObject)来打印某个对象信息的时候(注意占位符一定是%@),后台的log内容就是我们description方法中返回的字符串。
比如:

    NSString *exampleString = @"AaBbCcDd";
    NSLog(@"%@",exampleString);

后台打印如下:

2016-05-24 17:45:59.198 RunTimePlayGround[89500:9545323] AaBbCcDd

对于NSString、NSArray、NSDictionary等类来说,一般description都能返回我们所需要的字符串(如上文例子),比如NSArray的就是所包含元素的description。对于通常一些不太好描述的类的description或者自定义类的description,那么默认的实现就是返回一个由类名和内存地址组成的字符串,比如:

 NSLog(@"%@",self);

后台打印如下:

2016-05-24 17:49:11.951 RunTimePlayGround[89523:9555137] <ViewController: 0x7fa30ac3d080>

综上来看,description方法是用来Debug使用的,用来打印我们需要的信息。
为了使我们能够更加清晰直观的看到打印信息,可以通过重写- (NSString *)description;方法来自定义对象的description。

DebugDescription

该方法其实和- (NSString *)description;是差不多的,只不过使用场景稍有不同。
description主要用于日志输出的时候会调用到。
而debugDescription在使用LLDB调试的时候会起到作用。
所以建议一般当我们需要内存地址等一些详尽信息时,可以写在debugDescription里方便LLDB调试用,而一般日志输出则按需要写。
比如在一个自定义Label中我们这么写:

-(NSString *)description
{
    return [NSString stringWithFormat:@"%@:%@",NSStringFromClass([self class]),self.text];
}

- (NSString *)debugDescription
{
    return [NSString stringWithFormat:@"%@,%p,%@",NSStringFromClass([self class]),self,self.text];
}

测试代码:


测试代码

记得可以如图位置打上断点用LLDB调试。

后台打印如下:

2016-05-24 18:06:03.191 RunTimePlayGround[89593:9587129] AaBbCcDd
2016-05-24 18:06:03.192 RunTimePlayGround[89593:9587129] <ViewController: 0x7fa243595a40>
(lldb) po testLabel
TestLabel,0x7fa2434227b0,sssss

(lldb) 

总结

其实要点不多,简单来说还是以下两点。

上一篇下一篇

猜你喜欢

热点阅读