iphone - 应用程序在dealloc中崩溃

标签 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
}

怎么了?

最佳答案

[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/

相关文章:

iphone - UIGraphicsGetImageFromCurrentImageContext - 将图像分成两部分创建黑色背景

objective-c - CGImageCreateWithJPEGDataProvider 线程安全与否?

iphone - 如何使用iPhone的崩溃报告查找问题?

iphone - 查找字符串中字符的索引

iphone - 向 ScrollView 添加标签

ios - iPhone 解压码

ios - Objective-C 循环比较两个文本字段的密码

ios - 子类化 MKOverlayPathView 以创建 MKPolylineView

ios - 有没有办法在 iOS 平台上的 NativeScript 应用程序中捕获和取消后退按钮事件?

ios - 如何识别 EKEvent 的 EKParticipationStatus 是否为挂起(尚未接受)?