NSArray版本因EXC_BAD_ACCESS而崩溃

1 iphone xcode objective-c

另一个益智游戏.我有一个NSArray(iTours),包含3个对象,保留计数为1.

此数组在对象dealloc方法中发布,如下所示:

- (void)dealloc {
    NSLog(@"retain count für iTouren: %d", [iTours retainCount]);
    [iTours release];  // triggers EXC_BAD_ACCESS 
    [super  dealloc];
}
Run Code Online (Sandbox Code Playgroud)

控制台窗口显示以下消息(无更多详细信息):

程序接收信号:"EXC_BAD_ACCESS".

发生了什么事情的线索?我错过了什么?

bbu*_*bum 18

最有可能的是,你过度释放iTouren,因此,这种调用release导致了崩溃.也就是说,iTouren当你释放包含数组时,以及当包含数组发送release到已经解除分配iTouren的应用程序崩溃时,已经解除分配.

(当然,iTours可能是已经解除分配的对象.无论如何,这是一个过度释放的问题.)

打开僵尸检测,看看是否可以解决特定问题.

请注意

返回的号码retainCount是无用的

.绝对保留计数是一个实现细节,通常是一个看似无稽之谈的特定值.

在这种情况下,release对象的final 不会减少保留计数.为什么?因为无论如何,当对象即将被解除分配时,这将是一个浪费的循环.retainCount返回0 是不可能的,因为根据定义,保留计数为0的对象已经被释放,因此,无论如何不再是可行的消息接收者.