NSZombie有没有可能没有用ARC指出EXC_BAD_ACCESS?
问题描述:
我目前正在与一些人合作开发一个ios项目,其中一个人决定在应用程序的一部分中使用ARC。NSZombie有没有可能没有用ARC指出EXC_BAD_ACCESS?
Unfotunatly,从后台回来时,我们目前正在经历的一些崩溃。
下面是我们按照应用程序崩溃的步骤,我们跟iOS模拟器执行它们:
- 启动应用程序
- 再上一个视图控制器A(与ARC编码)
- GET在视图控制器B(不与ARC编码-to说实话,我不 知道这是否是有关的事宜)
- 将应用程序在后台。
- 模拟内存再次警告(THX模拟器)
- 启动应用程序,我们将在ViewController中乙
- 反悔的viewController一个
- 指向与主要功能的应用程序崩溃 EXC_BAD_ACCESS
我们也尝试使用NSZombieEnabled为YES,但是当我们这样做时,应用程序不会崩溃,并保持运行完美,所以我们不知道是否有可能是NSZombieEnabled不很好地工作弧?
如果任何人都可以给我一个关于ARC和NSZombieEnabled的快速和清晰的见解,我会认为我知道它是如何工作的,但显然我必须错过一些东西。
不管怎样,谢谢您的帮助和时间。
答
更好
比使用NSZombieEnabled,你应该个人项目,并使用僵尸工具。当你做同样的事情时,它应该停止并说“僵尸消息”,在那里你可以点击一个箭头看到这个僵尸类,以及它被分配/释放的地方。
我不认为崩溃与ARC有关,而是在viewDidUnload中,您正在释放某些内容,然后不设置对nil的引用 - 当您回来时它会尝试使用无效的引用。
也许你会更好,如果一切使用ARC,因为它确实有助于治愈这样的问题(bug是在非ARC代码很可能)。
谢谢您的回答中,我们发现了这个问题,你在某种程度上是正确的,这是没有设置在viewDidUnload零的属性,它实际上是一个比较复杂一点。它是一个包含iCarousel视图(库)中使用的元素的数组,这些项目是异步加载图像的,在viewDidLoad中我们调用了一个函数来重置该数组,因此所有元素都被释放,并且当图像加载时它正在崩溃。看起来,ARC并不能避免NSZombie的工作,在这种情况下,这是因为我们没有在代码中明确引用崩溃项目。 – Saliom