调试手段需求
实现一种打印方法,对于任意输入的对象,根据类型推导的结果,自动分析其内存,按照对象的类结构,打印对象的所有成员名和成员值。如果对象内有对象指针,则递归继续往下推导和打印内部成员的成员。
目前的调试手段,设断点看对象值已经基本满足了这个需求。但是运行时打印,实现这个需求还比较困难。
xcode的nslog已经实现了这个功能?并没有。要求需要打印的对象所属的类有个description函数完成这个转换,仍不是自动推导的。
NSLog(@
"%@的网址为%@"
, xcoder.siteName, xcoder.siteAdd);
觉不觉得有点儿麻烦啊,这就是一个对xcoder的描述嘛,为甚不能直接打印这个对象呢?那行,我们改成打印对象:
NSLog(@ "%@" , xcoder); |
打印结果是这样的:
2013-09-15 08:57:33.973 构造方法[1063:303] <WebSite: 0x100109a50> |
打印的结果其实是这个对象的指针地址,为什么呢?因为这本身就是一个指针嘛!
其实这个我们是可以改变的,当需要打印一个对象时,在ObjC中调用的时description方法,这个方法的返回值是NSString,所以这个的描述字符串是@”%@”,只要我们将这个方法重写,就能得到我们想要的结果了!
- (NSString *)description { |
NSString * description = [[NSString alloc] initWithFormat:@ "%@的网址为%@" , |
self.siteName, |
self.siteAdd]; |
return description; |
} |
不信可以试试看!