在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理有很大的帮助。