iOS基础:description方法重写

一、介绍

description方法是NSObject类的一个实例方法,因此所有的Object-C对象都有description方法。description方法返回的永远是字符串。

description方法的作用是打印对象跟Java里的toString有点类似。对于一个Person类,如果没有重写description方法,NSLog(@%@,p),输出的是p的地址,而我们想要的效果是打印出person的成员变量,所以我们可以在Person类里重写description方法。

二、应用

新建一个Person类 

声明部分:

#import <Foundation/Foundation.h>

@interface Person : NSObject
@property (nonatomic, copy)NSString * name;
@property (nonatomic, assign)NSInteger age;

-(instancetype)initWithName:(NSString *)name age:(NSInteger)age;
@end

实现部分:

-(instancetype)initWithName:(NSString *)name age:(NSInteger)age{
    
    self = [super init];
    if (self) {
        self.name = name;
        self.age = age;
    }
    return self;
}
创建一个Person对象并打印该对象

    Person * person = [[Person alloc] initWithName:@"大圣" age:500];
    NSLog(@"%@",person);
输出的结果为:

2016-06-13 11:17:08.231 Description-test[2795:112637] <Person: 0x7f855a607db0>

//这两个方法是等价的
//NSLog();函数在打印时都会去调用对象的description方法。控制台只能输出字符串。description方法返回的正是字符串。
    NSLog(@"%@",person);
    NSLog(@"%@",[person description]);

输出结果为:

2016-06-13 11:26:49.772 Description-test[2861:119853] <Person: 0x7f8278c19d90>

2016-06-13 11:26:49.773 Description-test[2861:119853] <Person: 0x7f8278c19d90>

要想打印时获取自己感兴趣的内容需要重写父类的description方法

-(NSString *)description{
    
    NSString * string = [NSString stringWithFormat:@"<Person: name = %@ age = %ld>",self.name,self.age];
    
    return string;
    
}

此时的输出结果为:

2016-06-13 11:30:58.330 Description-test[2913:122828] <Person: name =大圣 age = 500>


三、重写字典的descriptionWithLocal:(id)local indent:(NSUInteger)level方法

重写description方法是不管用的。

需要给字典添加分类,在分类的.m文件中重写即可。不需要在.h文件中声明

-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level{
    
    //初始化可变字符串
    NSMutableString *string = [NSMutableString string];
    //拼接开头[
    [string appendString:@"["];
    
    //拼接字典中所有的键值对
    [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        [string appendFormat:@"%@:",key];
        [string appendFormat:@"%@\\",obj];
    }];
    
    //拼接结尾]
    [string appendString:@"]"];
    
    return string;
    
}



  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值