我正在使用Zombies尝试摆脱EXC_BAD_ACCESS错误。
在Zombies中,当应用程序崩溃时我收到了此消息 -
一个Objective-C消息被发送到一个解除分配的对象(僵尸) 地址:0x8955310。
我的问题是我接下来要做什么来解决问题?
答案 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功能,这对内存管理有很大帮助。