Objective c 访问有效的、未释放的对象时发生EXC_BAD_访问错误

Objective c 访问有效的、未释放的对象时发生EXC_BAD_访问错误,objective-c,ios,exc-bad-access,autorelease,nszombie,Objective C,Ios,Exc Bad Access,Autorelease,Nszombie,我在释放一个对象时遇到了一个奇怪的问题。在对象的dealloc方法中,我正在释放另一个(子)对象。当这个子对象被释放时,我得到一个EXC_BAD_访问错误。在调用release之前,我非常确定子对象是一个有效的指针 这就是我确认这种奇怪的方式——我在dealloc方法中设置了一个断点,就在子对象发布之前,它被分配了!我可以向它发送消息,它会正确响应。另一个奇怪的错误是,如果NSZombieEnabled设置为YES,我根本不会收到错误,即使NSZombie通常的错误表示我已向解除分配的对象发送消

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

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

有人知道怎么解决这个问题吗

提前谢谢


*编辑1*

我发现,如果我将[super dealoc]放在dealoc的末尾,它会崩溃,但如果我将它放在开头,它不会崩溃。我以前也遇到过类似的情况,只是另一种情况——如果我在dealloc开始时[super dealloc],应用程序就会崩溃,而在dealloc结束时没有

为什么会有不同?什么时候应该使用什么


*编辑2*


从头开始编辑#1!这两种方式都不起作用。

您的dealloc例程是否碰巧是这样的:

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

如果是,请更改顺序。如果您调用
[super dealloc]
,您的对象将从内存中消失,稍后尝试访问其他对象将导致您访问未分配的内存->EXC\u BAD\u access。

如果不查看对象是如何初始化的,任何人都很难确定

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

[someObject release];

您能提供一些描述您的问题的代码吗?请发布一些相关代码,说明它在哪里崩溃以及如何释放该对象。还可以尝试使用仪器检测僵尸。不幸的是,这是一个相当复杂的代码,我不想公开。。。这就是为什么我要问一个一般性的答案……FWIW,如果设置了NSZombieEnabled,则根本不会释放内存,因此您的代码似乎运行正常,但实际上它像筛子一样泄漏。使用该设置仅用于调试目的。是的,我知道,我不指望在NSZombieEnabled的情况下发布它来运行它,只是觉得我应该提到它。没关系,我在两种情况下都得到相同的结果。