应用程序在dealloc崩溃

时间:2012-07-11 03:15:42

标签: iphone objective-c ios ipad memory

我的应用在dealloc中崩溃,但有时只会崩溃。

我创建了一个用于缓存5个对象的数组。当用户点击左右对象时,会添加一个新对象,并删除最后一个对象。当我测试应用程序时,在点击向右或向左按钮100-500次后,应用程序崩溃。

应用程序在dealloc方法中崩溃,但所有对象都已正确分配和释放。

我的dealloc方法:

 - (void)dealloc
{
    [super dealloc];
    [_sImageLane release];
    [_sTipoLane release];
    [_maRecomended release];
    [_maProdcucts release]; // here crash in this line EXC_BAD_ACCESSE
}

出了什么问题?

2 个答案:

答案 0 :(得分:9)

[super dealloc]放在最后而不是第一位。

编辑:发生这种情况的原因是由于objc对象的生命周期。当它死亡时,会向对象发送dealloc消息。在该方法中,对象必须自我清理,并将消息传递给继承链(因为超类也需要自我清理)。那么,如果你在[super dealloc]是最后一次的情况下正确地做到这一点会发生什么呢?

  

清理自己的资源 - >清理超级资源 - >清理超级超级资源 - >等 - >运行时回收的内存。

很好,如果按照自己的方式行事,会发生什么?

  

清理超级资源 - >清理超级超级资源 - >等等 - >运行时回收的内存 - >清理自己的资源

哎呀,现在你正在访问回收的内存并试图与它进行交互(即EXC_BAD_ACCESS或更糟糕的是,在另一个对象的其他地方弄乱内存并且没有意识到它)。

NSObject的dealloc方法实际上释放了内存(可能是通过free()),所以一旦你调用它就处于未定义的危险灰色区域。

答案 1 :(得分:0)

您使用的是什么版本的Xcode?新版本不需要您分配或释放内存。它为你来运行它。尝试注释掉dealloc方法,然后编译。