接收错误objc_retainAutoreleasedReturnValue

时间:2012-07-19 16:01:12

标签: iphone xcode exc-bad-access

我正在修复我今天在代码中遇到的一些泄漏,这样做我在设备上运行代码时遇到了这个错误(模拟器工作正常)。我附上了一张照片来显示我的错误。

我认为我的代码与它无关,因为在模拟器上它工作正常。我试图查一查,但没有发现任何对我有用的东西。我知道这与我正在使用的ARC有关。

非常感谢任何帮助

enter image description here

2 个答案:

答案 0 :(得分:2)

您已发布obj_retain功能的汇编代码转储。断点处理程序表明它正在尝试从无效的内存地址加载一个值。

基于名为objc_retainAutoreleasedReturnValue的有用名称,似乎声称返回Objective-C对象的函数/方法实际上返回了一个垃圾值(无效指针),并且运行时崩溃了试图保留它。

主线程堆栈只有两层深度非常奇怪。

您是否启用了优化功能?通常它们在调试模式下关闭,在启动模式下关闭。在忘记初始化指针变量之前,我遇到了错误;在调试模式下,它默认为0,因此代码工作正常,但在发布模式下,它将获得垃圾值并导致崩溃。

这就是我所能说的,截图中没有太多有用的信息。

答案 1 :(得分:1)

在调试器中查看其他线程在崩溃时正在执行的操作。您可能正在使用已经或已经在主线程上解除分配的后台线程上的对象。如果发生崩溃时另一个线程正在做某事,那么这可能就是原因。

我发生了完全相同的错误,这就是我的原因。

我仍然不清楚为什么错误出现在主线程上,而不是在后台线程上,以及为什么它只在主线程堆栈上显示两个条目。可能ARC正在主线程runloop调用之间进行一些内存清理工作。我可以想象它不喜欢被另一个线程覆盖的dealloc'ed内存。