2

我目前正在和一些人一起做一个 ios 项目,我们中的一个人决定在应用程序的一部分中使用 ARC。

不幸的是,我们目前在从后台返回时遇到了一些崩溃。

以下是我们使应用程序崩溃的步骤,我们使用 ios-simulator 执行它们:

  1. 启动应用程序
  2. 获取 ViewController A(使用 ARC 编码)
  3. 上一个 ViewController B(没有用 ARC 编码-老实说我不知道​​它是否相关-)
  4. 将应用程序置于后台。
  5. 模拟内存警告(感谢模拟器)
  6. 再次启动应用程序,我们将在 ViewController B
  7. 回到 Viewcontroller A
  8. 应用程序崩溃指向带有 EXC_BAD_ACCESS 的主函数

我们确实尝试将 NSZombieEnabled 设置为 YES,但是当我们这样做时,应用程序不会崩溃并保持完美运行,所以我们想知道 NSZombieEnabled 是否可能无法与 ARC 一起使用?

如果有人能给我一个关于 ARC 和 NSZombieEnabled 的快速而清晰的见解,我想我知道它是如何工作的,但显然我必须遗漏一些东西。

无论如何,感谢您的帮助和时间。

4

1 回答 1

0

比使用 NSZombieEnabled 更好的是,您应该对项目进行 Profile,并使用 Zombie 工具。当你做同样的事情时,它应该停下来并说“zombie messaged”,在那里你可以点击一个箭头来查看僵尸类,以及它被分配/释放的位置。

我认为崩溃与 ARC 无关,而是在 viewDidUnload 中释放了一些东西,然后没有设置对 nil 的引用——当你回来时,它会尝试使用无效的引用。

如果一切都使用 ARC 可能会更好,因为它确实有助于解决此类问题(该错误很可能出现在非 ARC 代码中)。

于 2012-06-11T07:46:48.700 回答