自动类型推导和对象打印

4 篇文章 0 订阅

调试手段需求

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

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


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

不信可以试试看!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值