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

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

[ANavigationController retain]:发送到已释放实例的消息。

在调试此代码时,我已打印了推入控制器的地址并释放了一个地址:

  • 在第一个被推入的控制器地址上是 0xDA724F0
  • 如果我返回并模拟内存警告-一切正常。
  • 第二次推送-调用了地址为的控制器的–dealloc方法0xDA724F0
  • 新推入的控制器地址为 0xFA720F0
  • 返回并模拟内存警告崩溃并显示错误:

    [ANavigationController retain]:发送到已释放实例的消息0xDA724F0

  • 为什么释放的控制器(在步骤4中)完全收到内存警告消息?

    编辑

    我正在使用ARC。

    编辑

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

    + [UIViewController _traverseViewControllerHierarchyWithDelayedReleaseArray:block:]

    最佳答案

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

    尽管如此,对于任何问题的线索,我仍将不胜感激。

    编辑

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

    10-07 21:24