EXC_BAD_ACCESS消息发送到解除分配的实例,但我正在使用ARC?

时间:2011-10-29 16:39:23

标签: objective-c memory exc-bad-access automatic-ref-counting

我有一个从SOAP Web服务获取信息的应用程序,我希望在UITableView中显示结果。

我有一个以前版本的这个应用程序,我正在创建一个新版本,基本上清理一些东西,摆脱一堆已弃用且不再使用的遗留代码。

在之前的版本中,这很有效。在新版本中,没有那么多。

基本上,当前场景返回3个字符串,我试图将其用作UITableView中数据的基础。

我正在努力解决这个问题,因为它很难找到EXC_BAD_ACCESS错误!

(顺便说一句,如果某人有办法让调试体验更像Visual Studio,我很乐意听到它!如果不知道哪一行导致了错误,那么也是如此令人沮丧,而且也无法在崩溃时查看我的局部变量以查看它是什么。我已经在异常断点中添加了,但这似乎没有做太多。)

无论如何,导致出错的行是:

return [[self Libraries] count];

它出现在tableView:numberOfRowsInSection:

错误消息我获得APPEARS以引用应存储在NSMutableArray [self Libraries]中的字符串。

这里发生了什么事? 我正在使用 ARC ,所以不应该正确处理我的所有内存管理吗? 我的代码中没有任何手动发布声明!

请帮我解决这个问题!

3 个答案:

答案 0 :(得分:23)

在调试器中设置NSZombieEnabledMallocStackLoggingguard malloc。然后,当您的应用程序崩溃时,请在gdb控制台中输入:

(gdb) info malloc-history 0x543216

0x543216替换为导致崩溃的对象的地址,您将获得更有用的堆栈跟踪,它可以帮助您查明代码中导致问题的确切行。

See this article for more detailed instructions.

答案 1 :(得分:2)

ARC依赖于Apple标准/推荐的命名做法。检查您是否违反了其中任何一项。

对于初学者来说,如果“Libraries”是一个实例,则存在命名问题。

答案 2 :(得分:1)

好的,所以我觉得有点傻,但我有两台生产机器。其中一个,我已经安装了Xcode 4.2 beta的副本以及最终的生产副本。我忘了卸载测试版并使用它来运行我的代码。一旦我清除了并且在最终发布的Xcode 4.2上运行我的代码,一切都正常。

正如我上面提到的Jonathan Grynspan,我理解Obj-C内存管理。出于某种原因,我获得了保留/发布/发布(由ARC执行),并且在最终版本中修复了该错误。

感谢您帮助跟踪此问题!至少我得到了一个明确的答案,为什么存在问题!