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)
出了什么问题?
放在[super dealloc]最后而不是第一个.
编辑:发生这种情况的原因是由于objc对象的生命周期.当它死亡的时候,对象被发送dealloc消息.在该方法中,对象必须自我清理,并将消息传递给继承链(因为超类也需要自我清理).那么,如果你做到[super dealloc]最后这样做会怎么样?
清理自己的资源 - >清理超级资源 - >清理super超级资源上的资源 - >等 - 运行时回收的内存.
很好,如果你这样做会发生什么?
在超级上清理资源 - >在超级超级上清理资源 - >等 - >运行时回收的内存 - >清理自己的资源
哎呀,现在你正在访问回收的内存并试图与它进行交互(即EXC_BAD_ACCESS或更糟糕的是,在另一个对象的其他地方弄乱内存并且没有意识到它).
NSObjectdealloc方法实际上释放了内存(可能是通过free()),所以一旦你调用它,你就会处于未定义的危险灰色区域.
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |