Iphone NSObject的重写描述方法
我不确定这是否是一个模拟器问题,但我不记得以前在使用iPad5.0模拟器及以下版本时有过这个问题(现在我正在运行iPad5.1模拟器)。我将条件对象的描述方法改写为:Iphone NSObject的重写描述方法,iphone,objective-c,Iphone,Objective C,我不确定这是否是一个模拟器问题,但我不记得以前在使用iPad5.0模拟器及以下版本时有过这个问题(现在我正在运行iPad5.1模拟器)。我将条件对象的描述方法改写为: - (NSString *)description { NSString *str = [[NSString alloc] initWithFormat:@"Condition: %@", _conditionName]; return [str autorelease]; } 我有这些对象的数组。我的值都是有效
- (NSString *)description {
NSString *str = [[NSString alloc] initWithFormat:@"Condition: %@", _conditionName];
return [str autorelease];
}
我有这些对象的数组。我的值都是有效的。当我这样做时:
for (Condition *p in self.reportsArray) {
NSLog(@"%@", [p description]);
}
它记录了我所有的值,最后崩溃了。当我观察带有僵尸的仪器时,最后4个呼叫是
-[NSPlaceHolderString initWithBytes:length:encoding:]
+[NSString stringWithUTF8String:]
-[NSAutoreleasePool release]
-[NSPlaceholderString initWithFormat:locale:arguments:]
我覆盖的描述正确吗
编辑:
在Instruments中,我得到:消息被发送到地址为0x8ccf190的解除分配对象(僵尸)。在应用程序本身上,我获得了EXC_BAD_访问权限。从描述方法返回的字符串似乎释放得太快了 尝试使用
stringWithFormat:
class方法重写方法
- (NSString *)description {
return [NSString stringWithFormat:@"Condition: %@", _conditionName];
}
确保_conditionName不是基元。
因为格式字符串“%@”需要一个对象。为什么不迁移到ARC?conditionName是有效的Objective-C对象吗?我总是这样做,从来没有问题。@jonkroll这很有趣,因为我认为alloc]init]autorelease与返回自动删除的NSString是一样的?@Crystal:老实说,我也这么认为。我承认我不完全明白在这种情况下发生了什么。