0

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

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

任何帮助将不胜感激

在此处输入图像描述

4

2 回答 2

2

obj_retain您已经发布了该函数的汇编代码转储。断点处理程序指示它正在尝试从无效的内存地址加载值。

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

很奇怪,主线程堆栈只有两层深。

你有开启优化吗?通常它们在调试模式下关闭,在发布模式下打开。在忘记初始化指针变量之前,我遇到过错误;在调试模式下它默认为 0,所以代码工作正常,但在发布模式下它会得到一个垃圾值并导致崩溃。

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

于 2012-07-19T16:37:18.040 回答
1

在调试器中查看崩溃时其他线程正在做什么。您可能正在使用已经或已经在主线程上释放的后台线程上的对象。如果崩溃发生时另一个线程正在做某事,那么这很可能是原因。

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

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

于 2012-09-06T19:53:40.753 回答