0

我在释放对象时出现了一个奇怪的问题。在对象的dealloc方法中,我正在释放另一个(子)对象。当这个子对象被释放时,我得到一个 EXC_BAD_ACCESS 错误。在我调用 release 之前,我很确定子对象是一个有效的指针。

这就是我确认奇怪之处的方式——我在 dealloc 方法中设置了一个断点,就在释放子对象之前,它被分配了!我可以向它发送消息,它会正确响应。另一个奇怪的错误是,如果 NSZombieEnabled 设置为 YES,我根本不会收到错误,甚至 NSZombie 的常见错误,即我已向已释放对象发送消息,代码运行正常。

有谁知道如何解决这个问题?

提前致谢!


* 编辑 1 *

我发现如果我将 [super dealloc] 放在 dealloc 的末尾,它会崩溃,但如果我将它放在 start 时,它不会。我以前也遇到过类似的情况,只是相反——如果我在我的 dealloc 开始时 [super dealloc] 应用程序会崩溃,而最后却没有。

为什么它会有所作为,什么时候应该使用什么?


* 编辑 2 *

从头开始编辑#1!这两种方式都行不通。

4

2 回答 2

1

您的 dealloc 例程是否恰好如下所示:

- (void)dealloc
{
   [super dealloc];
   [otherObject release];
}

如果是这样,请更改顺序。如果您调用[super dealloc],您的对象将从内存中消失,稍后尝试访问 otherObject 将导致您访问未分配的内存 -> EXC_BAD_ACCESS。

于 2011-08-11T11:58:20.650 回答
0

如果没有看到对象是如何初始化的,任何人都很难确定。

MyObject *someObject = [MyObject alloc] init...]; // Make sure you aren't autoreleasing here
// do some stuff with someObject

[someObject release];
于 2011-08-11T18:35:05.027 回答