zoukankan      html  css  js  c++  java
  • 九:description方法

    一、基本含义

    1、当用%@打印类或对象时候,系统内部默认就会调用 description方法,拿到返回值进行输出,默认输出的是返回类名和对象的内存地址。

    其实%@的本质是用于打印字符串.

    调用该方法, 该方法会返回一个字符串, 字符串的默认格式 <类的名称: 对象的地址>

    2、代码:

     1 #import <Foundation/Foundation.h>
     2 @interface Animal: NSObject
     3 /** 颜色 */
     4 @property (strong, nonatomic)NSString *color;
     5 @end
     6 @implementation Animal
     7 @end
     8 
     9 int main(int argc, const char * argv[]) {
    10     @autoreleasepool {
    11         Animal *a = [[Animal alloc] init];
    12         a.color = @"green";
    13         NSLog(@"%@",a);  //打印对象a 
    14     }
    15     return 0;
    16 }

    输出结果:

    1 2016-04-27 07:55:42.250 description[4955:864017] <Animal: 0x1006000a0>
    2 Program ended with exit code: 0

    二、重写description

    description方法的默认实现是返回类名和对象的内存地址,这样的话,使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关心的是对象内部的一些成变量的值。因此,会经常重写description方法,返回对象的属性,覆盖description方法的默认实现。

    代码:

    #import <Foundation/Foundation.h>
    @interface Animal: NSObject
    /** 颜色 */
    @property (strong, nonatomic)NSString *color;
    @end
    @implementation Animal
    - (NSString *)description
    {
        return [NSString stringWithFormat:@"color:%@",_color]; //此处的_color决不能写成self,否则会造成死循环
    }
    @end
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            Animal *a = [[Animal alloc] init];
            a.color = @"green";
            NSLog(@"%@",a);  //这时候打印的就是对象的属性
        }
        return 0;
    }

    输出结果:

    2016-04-27 08:09:42.105 description[4983:875363] color:green
    Program ended with exit code: 0

    注意:如果在description方法中利用%@输出self会造成死循环

  • 相关阅读:
    go包之logrus显示日志文件与行号
    linux几种快速清空文件内容的方法
    (转)CSS3之pointer-events(屏蔽鼠标事件)属性说明
    Linux下source命令详解
    控制台操作mysql常用命令
    解决beego中同时开启http和https时,https端口占用问题
    有关亚马逊云的使用链接收集
    favicon.ico--网站标题小图片二三事
    js获取url协议、url, 端口号等信息路由信息
    (转) Golang的单引号、双引号与反引号
  • 原文地址:https://www.cnblogs.com/hissia/p/5437429.html
Copyright © 2011-2022 走看看