现在的位置: 首页 > 综合 > 正文

关于自定义description的一点用法

2013年09月19日 ⁄ 综合 ⁄ 共 584字 ⁄ 字号 评论关闭

今天在写一段代码时, 自定义了一个UIView, 并且修改了其description 显示, 

修改如下:

- (NSString *)description {

   
NSLog
(@"XXXX");

   
NSString
*selfDes = [NSString
stringWithFormat
:@"self=%@, yourAge=%d",
self, self.yourAge];

   
return
selfDes;

}

运行时, 发现, 在使用NSLog这个自定义的UIView对象时, 发现程序崩溃,而且提示也比较莫名其妙,错误信息如下:

0x1c03b9c:  calll 
0x1c03ba1                 ; __CFStringAppendFormatCore +
17

然后在左边的调试栈中,发现有大量的调用[SIniView description];  于是便推测,可以这个方法被多次调用, 然后才想到加入一免NSLog(@"xxxx");

运行发现在崩溃前, xxxx被反复地调用并显示出来。

后来,分析问题的原因,在于自定义description时,不能在里面还去调用self的转换成NSString的输出。因为在description中再去取self=%@,会使得里面又会调用自己的description方法。 所以形成了无效循环, 直到系统资源耗尽。

但是在description中,输入自己的其它对象,则是可以的。

抱歉!评论已关闭.