应用程序在dealloc崩溃

我的应用程序在dealloc崩溃,但只是有时。

我创build了一个caching5个对象的数组。 当用户点击右键或左键时,会添加一个新对象,最后一个被删除。 当我testing应用程序时,点击右侧或左侧button100-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消息。 在这个方法里面,对象必须清理自己,然后把消息传递给inheritance链(因为超类也需要清理自己)。 那么,如果你用[super dealloc]最后一次正确的做了什么呢?

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

很好,如果你按照自己的方式做了什么呢?

清理super上的资源 – >清理super上的资源 – >等 – >运行时回收的内存 – >清理自己的资源

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

NSObject的dealloc方法从字面上释放了内存(可能通过free() ),所以一旦你调用了你在危险的灰色区域。

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