zoukankan      html  css  js  c++  java
  • iOS description

    description:重写对象的这个方法,会在打印的时候显示出自定义的description中的内容
    debugDescription:方法是在开发者在调试器中以控制台命令打印对象时才调用的。 在NSObject类的默认实现中,NSLog打印是只是直接调用了description,debugDescription是通过命令来调用的,如:

    现在有个SomeObject类,它重写了description和debugDescription方法:

    @implementation SomeObject

    - (NSString *)description
    {
    return [NSString stringWithFormat:@"%@", @{@"title":@"title_value",
    @"name":@"name_value",
    @"desc":@"desc_value"
    }];
    }

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

    调用的时候
    SomeObject *object = [[SomeObject alloc] init];
    NSLog(@"object = %@", object);
    //Breakpoint here,在这打断点

    这个时候在控制台打印:
    2017-11-08 10:29:44.878362+0800 FrameworkTest[2596:71158] object = {
    desc = "desc_value";
    name = "name_value";
    title = "title_value";
    }
    (lldb)

    通过LLDB的“po”命令可以完成对象的打印工作,输出如下:
    2017-11-08 10:29:44.878362+0800 FrameworkTest[2596:71158] object = {
    desc = "desc_value";
    name = "name_value";
    title = "title_value";
    }
    (lldb) po object
    tobject = SomeObject 0x6040002056d0

    通过po命令将debugDescription中的内容打印出来,这样做的好处是,你可能不想把类名和指针地址这种额外的信息放到普通的描述信息里,但是确希望调试的时候能方便的看到它们,这种情况下就可以使用这种输出方式来实现。Foundation框架中的NSArray就是这么做的:
    如:
    NSArray *array = @[@1, @2, @3];
    NSLog(@"%@", array);
    //在这打断点

    运行代码输出:
    2017-11-08 10:44:30.410018+0800 FrameworkTest[2703:87863] (
    1,
    2,
    3
    )
    (lldb) po array
    <__NSArrayI 0x60c000245550>(
    1,
    2,
    3
    )


    要点:
    1、实现descr方法返回一个有意义的字符串,用以描述该实例;
    2、若想在调试时打印出更详尽的描述信息,则应该实现debugDescription方法。

  • 相关阅读:
    vue-nuxtjs
    mongodb4.0支持事务
    promisify,promisifyAll,promise.all实现原理
    nodejs, 阿里oss上传下载图片
    数据库备份与还原
    SQL 数据类型、约束、索引及视图
    数据库的查询
    数据库(增、删、改、查)
    数据库基础知识
    C#语言小结
  • 原文地址:https://www.cnblogs.com/wudan7/p/7803020.html
Copyright © 2011-2022 走看看