开发中通过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}];
}