应用程序在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方法,然后编译。