在Xcode中使用僵尸

我正在使用僵尸来尝试摆脱EXC_BAD_ACCESS错误。

在僵尸中,当应用程序崩溃时,我收到了这条消息 –

Objective-C消息被发送到地址为0x8955310的释放对象(僵尸)。

我的问题是我接下来要做什么来解决问题?

在Xcode中为你的scheme打开malloc stack logging和zombies,然后在模拟器中运行应用程序。 当消息发送到僵尸时,Xcode应该进入debugging器。 在debugging器提示符处运行此命令:

 info malloc 0x8955310 

(用僵尸的实际地址代替!)从地址分配和释放的时候开始,你会得到堆栈跟踪信息。

很有可能你已经创build了一个对象,释放它,然后发送一条消息。

为了确保不会发生这种情况,一个安全的做法是在您完成使用后将您的对象设置nil

考虑:

 NSMutableArray *a = [NSmutableArray array]; [a dealloc]; [a do_something_weird]; 

您的应用程序可能会崩溃(不会总是崩溃)以响应此消息,因为在发布之后,您不拥有此内存,并且可能会被某个其他对象使用。

如果你改变这个序列

 NSMutableArray *a = [NSmutableArray array]; [a dealloc]; a=nil; [a do_something_weird]; 

确实没有什么会发生。 当你确定你已经完成使用这个对象的时候,这是一个安全的做法。

您也可以考虑使用自动引用计数function,这对内存pipe理有很大的帮助。