美文网首页
高效编写代码的方法(十四):Description

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

作者: 蜂猴 | 来源:发表于2016-05-24 18:14 被阅读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) 
    

    总结

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

    • 1 重写descpription方法来返回一个有意义,直观的字符串可以方便自己做日志调试。
    • 2 当description的信息已经不足够时,重写debugDescription来做补充。
    • 3 怎么更好使用这两种方法也需要按照场合,自己按需使用。

    相关文章

      网友评论

          本文标题:高效编写代码的方法(十四):Description

          本文链接:https://www.haomeiwen.com/subject/pwmzrttx.html