应用程序在dealloc崩溃

NTT*_*ake 1 memory iphone objective-c ipad ios

我的应用程序崩溃了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
}
Run Code Online (Sandbox Code Playgroud)

出了什么问题?

bor*_*den 9

放在[super dealloc]最后而不是第一个.

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

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

很好,如果你这样做会发生什么?

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

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

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