Iphone NSObject的重写描述方法

Iphone NSObject的重写描述方法,iphone,objective-c,Iphone,Objective C,我不确定这是否是一个模拟器问题,但我不记得以前在使用iPad5.0模拟器及以下版本时有过这个问题(现在我正在运行iPad5.1模拟器)。我将条件对象的描述方法改写为: - (NSString *)description { NSString *str = [[NSString alloc] initWithFormat:@"Condition: %@", _conditionName]; return [str autorelease]; } 我有这些对象的数组。我的值都是有效

我不确定这是否是一个模拟器问题,但我不记得以前在使用iPad5.0模拟器及以下版本时有过这个问题(现在我正在运行iPad5.1模拟器)。我将条件对象的描述方法改写为:

- (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:老实说,我也这么认为。我承认我不完全明白在这种情况下发生了什么。