iOS内存警告发送到解除分配的UIViewController

时间:2014-07-21 15:02:44

标签: ios objective-c memory-management uinavigationcontroller automatic-ref-counting

我的行为很奇怪。我的应用程序是使用UINavigationController启动的。如果我按下视图控制器ANavigationController,请返回并模拟内存警告,一切正常。

如果我以相同的方式推送同一个视图控制器(ANavigationController),请返回并模拟内存警告 - 应用程序崩溃并显示错误:

  

[ANavigationController retain]:发送给已解除分配的实例的消息。

在调试时,我已经打印了被推控制器的地址并解除了分配:

  1. 首先推送控制器地址为 0xDA724F0
  2. 如果我回去模拟记忆警告 - 一切正常。
  3. 调用地址 –dealloc 的控制器的第二次推送 - 0xDA724F0方法。
  4. 新推送的控制器地址为 0xFA720F0
  5. 返回并模拟内存警告因错误而崩溃:

      

    [ANavigationController retain]:发送到已解除分配的实例 0xDA724F0 的消息。

  6.      为什么解除分配的控制器(在步骤4中)会得到内存警告消息?

    修改

    我正在使用ARC。

    修改

    运行Instruments以测试分配并启用NSZombie后,我在预期位置崩溃,但UIkit库和负责的调用者报告的-1引用计数是:

      

    + [UIViewController _traverseViewControllerHierarchyWithDelayedReleaseArray:block:]

1 个答案:

答案 0 :(得分:0)

我不确定这是问题的解决方案还是解决方法,但是为此特定文件禁用ARC可以解决此问题。当然,我必须自己去管理记忆。

我仍然会感谢任何问题的线索。

修改

找到了解决方案。请参阅我对其他问题的回答:[UINavigationController retain]: message sent to deallocated instance