在发布对象时,我遇到了一个奇怪的问题。在对象的dealloc
方法中,我将释放另一个(子)对象。释放此子对象时,出现EXC_BAD_ACCESS错误。我很确定在我调用release之前,子对象是一个有效的指针。
这就是我如何证实这种怪异 - 我在dealloc方法中设置了一个断点,就在子对象发布之前,它被分配了!我可以发送消息,它可以正确响应。另一个奇怪的错误是,如果NSZombieEnabled设置为YES,我根本不会收到错误,甚至NSZombie通常的错误都说我已经向已释放的对象发送了一条消息,代码运行正常。
有人知道如何解决这个问题吗?
提前致谢!
*编辑1 *
我发现如果我将[super dealloc]放在dealloc的末尾,它会崩溃,但是如果我把它放在开始,它就不会。我以前有过类似的东西,只有另一种方式 - 如果我在dealloc开始时我的[超级dealloc]崩溃了,而且最后没有。
为什么它会有所作为,什么时候应该使用什么?
*编辑2 *
Scratch Edit#1!它无论如何都不起作用。
答案 0 :(得分:1)
你的dealloc例程是否恰好如下:
- (void)dealloc
{
[super dealloc];
[otherObject release];
}
如果是,请更改订单。如果你调用[super dealloc]
,你的对象就会从内存中消失,以后尝试访问otherObject会导致你访问未分配的内存 - > EXC_BAD_ACCESS。
答案 1 :(得分:0)
如果没有看到对象的初始化方式,任何人都很难确定。
MyObject *someObject = [MyObject alloc] init...]; // Make sure you aren't autoreleasing here
// do some stuff with someObject
[someObject release];