自动类型推导和对象打印

调试手段需求

实现一种打印方法,对于任意输入的对象,根据类型推导的结果,自动分析其内存,按照对象的类结构,打印对象的所有成员名和成员值。如果对象内有对象指针,则递归继续往下推导和打印内部成员的成员。

目前的调试手段,设断点看对象值已经基本满足了这个需求。但是运行时打印,实现这个需求还比较困难。


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];
    returndescription;
}

不信可以试试看!


猜你喜欢

转载自blog.csdn.net/lonelyrains/article/details/51602360