Ios 在Xcode中使用僵尸

Ios 在Xcode中使用僵尸,ios,xcode,Ios,Xcode,我正在使用僵尸来尝试摆脱EXC_BAD_访问错误 在《僵尸》中,当应用程序崩溃时,我收到了这条消息- 向位于的解除分配对象(僵尸)发送了Objective-C消息 地址:0x8955310 我的问题是,下一步该怎么做才能解决这个问题?很可能是您创建了一个对象,发布了它,然后向它发送了一条消息 为了确保不会发生这种情况,一个安全的做法是在使用完对象后将其设置为nil 考虑: NSMutableArray *a = [NSmutableArray array]; [a dealloc]; [a do

我正在使用僵尸来尝试摆脱EXC_BAD_访问错误

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

向位于的解除分配对象(僵尸)发送了Objective-C消息 地址:0x8955310


我的问题是,下一步该怎么做才能解决这个问题?

很可能是您创建了一个对象,发布了它,然后向它发送了一条消息

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

考虑:

NSMutableArray *a = [NSmutableArray array];
[a dealloc];
[a do_something_weird];
您的应用程序可能会因响应此消息而崩溃(不会总是崩溃),因为在发布后,您不拥有此内存,并且它可能会被其他对象使用

如果将此序列更改为

NSMutableArray *a = [NSmutableArray array];
[a dealloc];
a=nil;
[a do_something_weird];
什么也不会发生。当您确定已使用完对象时,这是一种安全的做法


你也可以考虑使用这个特性,这对内存管理有很大帮助。

很可能你已经创建了一个对象,发布了它,然后发送了一个消息。 为了确保不会发生这种情况,一个安全的做法是在使用完对象后将其设置为
nil

考虑:

NSMutableArray *a = [NSmutableArray array];
[a dealloc];
[a do_something_weird];
您的应用程序可能会因响应此消息而崩溃(不会总是崩溃),因为在发布后,您不拥有此内存,并且它可能会被其他对象使用

如果将此序列更改为

NSMutableArray *a = [NSmutableArray array];
[a dealloc];
a=nil;
[a do_something_weird];
什么也不会发生。当您确定已使用完对象时,这是一种安全的做法


你也可以考虑使用这个特性,这有助于内存管理。

< p>在XCODE中打开MaloC堆栈日志和僵尸,并在模拟器中运行应用程序。当消息发送到僵尸时,Xcode应该进入调试器。在调试器提示下运行此命令:

info malloc 0x8955310

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

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

info malloc 0x8955310

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

问题的可能重复之处尚不清楚<代码>下一步如何解决问题可以用多种方式解释。请重新措辞。这个问题可能重复的地方不清楚<代码>下一步如何解决问题可以用多种方式解释。请重新措辞。Hi@JAM,我想他是在问如何在代码中获取遇到此问题的对象(其地址为0x8955310):)我想“我下一步要做什么来解决这个问题”可以用不止一种方式来解释:)啊哈,你是对的,我相信你的答案是在得到目标后的解决方案DHi@JAM,我想他是在问如何在代码中获取遇到此问题的对象(其地址为0x8955310):)我想“我下一步要做什么来解决这个问题”可以用不止一种方式来解释:)啊哈,你是对的,我相信你的答案是在得到目标后的解决方案我有一个非常愚蠢的问题——我到底在哪里运行命令malloc_history PID 0xADDRESS | less。在终端中?我已经更改了我的答案,使用gdb的内置malloc历史支持。我有一个非常愚蠢的问题-我到底在哪里运行命令malloc_history PID 0xADDRESS | less。在终端中?我更改了答案,使用gdb内置的malloc历史支持。