美文网首页iOS Developer
实现description方法

实现description方法

作者: CoderLWG | 来源:发表于2017-02-08 20:52 被阅读28次

调试程序时经常需要打印并查看对象信息,最常用做法就是如下

 NSLog(@"object = %@",object);

在构建需要打印到日志的字符串时,object对象会收到description消息,该方法所返回的描述信息将取代“格式字符串”里的“%@”。比如,object是个数组,若用下列代码打印其信息:

 NSArray *object = @[@"A string", @(123)];
 NSLog(@"object = %@",object);
 则会输出:
object = (
  "A string",
  123
)

然而,如果是自定义类,那么输出信息是下面这样:
object = <EOCLocation: 0x60000003aa00>
此时输出内容并不太有用,想要输出有用的信息只需重写description方法并将描述此对象的字符串返回即可,如下有代表个人信息的类:

#import <Foundation/Foundation.h>

@interface EOCPerson : NSObject

@property (nonatomic,copy,readonly) NSString *firstName;
@property (nonatomic,copy,readonly) NSString *lastName;

- (id)initWithFirstName:(NSString *)firstName
               lastName:(NSString *)lastName;

@end

#import "EOCPerson.h"

@implementation EOCPerson

- (id)initWithFirstName:(NSString *)firstName lastName:(NSString *)lastName{
    if (self = [super init]) {
        _firstName = [firstName copy];
        _lastName = [lastName copy];
    }
    return self;
}

@end

该类的description方法可以这样实现:

- (NSString *)description{
    return [NSString stringWithFormat:@"<%@: %p, \"%@ %@\">",[self class],self,_firstName,_lastName];
}

该对象将会输出如下的格式:

EOCPerson *person = [[EOCPerson alloc] initWithFirstName:@"Bob" lastName:@"Smith"];
    NSLog(@"%@",person);
// output
<EOCPerson: 0x60000002ef80, "Bob Smith">

这样就比覆写之前输出的信息更加清楚,也更有用了。
有个简单的方法,可以在description中输出很多互不相同的信息,就是使用NSDictionary类的description方法。在自定义的description方法中,把待打印的信息放到字典里面,然后将字典对象的description方法所输出的内容包含在字符串里并返回,
如下所示:(详细过程见demo)

- (NSString *)description{
    return [NSString stringWithFormat:@"<%@: %p, %@>",[self class],
            self,
            @{@"title":_title,
              @"latitude":@(_latitude),
              @"longitude":@(_longitude)}
            ];
}

输出信息为:
<EOCLocation: 0x60000002efe0, {
    latitude = "51.506";
    longitude = 0;
    title = London;
}>

在断点调试的时候,也可以覆写debugDescription方法,
po person 打印当前类的信息,具体详见demo
本文demo
https://git.oschina.net/iOSlwg/descriptionMethd/tree/master

相关文章

网友评论

    本文标题:实现description方法

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