在Xcode中使用Zombies

时间:2011-11-26 04:41:40

标签: ios xcode

我正在使用Zombies尝试摆脱EXC_BAD_ACCESS错误。

在Zombies中,当应用程序崩溃时我收到了此消息 -

  

一个Objective-C消息被发送到一个解除分配的对象(僵尸)   地址:0x8955310。

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

2 个答案:

答案 0 :(得分:4)

在Xcode中为您的方案启用malloc堆栈日志记录和僵尸,并在模拟器中运行该应用程序。当消息发送到僵尸时,Xcode应该进入调试器。在调试器提示符下运行此命令:

info malloc 0x8955310

(替换僵尸的实际地址!)您将从分配和释放该地址时获得堆栈跟踪。

答案 1 :(得分:1)

您很可能已经创建了一个对象,将其释放并稍后向其发送了一条消息。

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

考虑:

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

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

如果将此序列更改为

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

没有任何事情会发生。当您确定使用该对象时,这是一种安全的做法。

您也可以考虑使用Automatic Reference Counting功能,这对内存管理有很大帮助。