iOS——打印内容,NSLog自定义对象的内容如何打印出来,而不是只打印地址

开发中通过NSLog的%@打印自定义的对象时,
只会打印出一个对象的内存地址。

例如:(xxxview:0xb677420)

但是打印系统的类型,例如NSArray就不会这样。

这是为什么呢?

原因:打印到日志时,对象会收到description消息,该方法所返回的描述信息将取代“%@”。

所以重写这个description方法就可以设定打印的东西。

还有一个方法可以重写,就是debugDescription方法:是开发者在调试器中以控制台命令打印对象时才调用的。在NSObject类的默认实现中,此方法只是直接调用了description。

当希望调试的时候可以看见打印的地址和信息,在正常打印的时候不需要地址时候,就可以像下面这样重写两个方法。

 - (NSString *)description
{
    return [NSStringstringWithFormat:@"<%@>",@{@"name":_name,@"work":_work}];
}

- (NSString *)debugDescription
{
    return [NSStringstringWithFormat:@"<%@ : %p, %@>",[selfclass],self,@{@"name":_name,@"work":_work}];
}
posted @ 2015-11-13 16:16  限量版爱  阅读(4400)  评论(0编辑  收藏  举报