gpt4 book ai didi

iphone - 应用程序在dealloc中崩溃

转载 作者:行者123 更新时间:2023-12-01 17:21:18 28 4
gpt4 key购买 nike

我的应用程序在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
}

怎么了?

最佳答案

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

编辑:发生这种情况的原因是由于objc对象的生命周期。当它死亡时,将向该对象发送dealloc消息。在该方法内部,对象必须清理自身,并在继承链中传递消息(因为 super class 也需要清理自身)。好吧,如果最后[super dealloc]正确地执行此操作会发生什么?

在self上清理资源->在super上清理资源->在super的super上清理资源->等等->运行时回收的内存。

很好,如果按照自己的方式做会怎样?

在super上清理资源->在super的super上清理资源->等等->运行时回收的内存->在self上清理资源

糟糕,现在您正在访问回收的内存并尝试与之交互(即EXC_BAD_ACCESS或更糟糕的是,在另一个对象上的其他地方弄乱了内存并且无法实现)。
NSObject的dealloc方法从字面上释放内存(可能通过free()),因此一旦调用,您就处于未定义的危险灰色区域。

关于iphone - 应用程序在dealloc中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11425030/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com