iOS内存警告发送到解除分配的UIViewController
我有奇怪的行为。 我的应用程序正在使用UINavigationController
启动。 如果我推视图控制器ANavigationController
,回去模拟内存警告一切正常。
如果我以相同的方式推动相同的视图控制器( ANavigationController
),请返回并模拟内存警告 – 应用程序崩溃,错误:
[ANavigationController retain]
:发送到释放实例的消息。
在debugging时,我打印了推送控制器的地址并释放了一个地址:
- 在第一个推送控制器地址是
0xDA724F0
。 - 如果我回去模拟记忆警告 – 一切都好。
- 调用地址为
0xDA724F0
第二个push-–dealloc
方法。 - 新推控制器地址是
0xFA720F0
。 - 回去并模拟内存警告崩溃与错误:
[ANavigationController retain]
:发送到解除分配的实例0xDA724F0
消息。 为什么释放控制器(在步骤4)根本得到内存警告信息?
编辑
我正在使用ARC。
编辑
运行仪器来testing分配和启用NSZombie我在预期的地方崩溃,但是在UIkit
库和负责调用者报告的-1引用计数是:
+ [UIViewController _traverseViewControllerHierarchyWithDelayedReleaseArray:block:]
我不确定这是解决scheme还是解决问题的方法,但禁用此特定文件的ARC可解决此问题。 当然,我必须自己去pipe理记忆。
不过,我会欣赏任何线索是什么问题。
编辑
find了解决办法。 请看我对我的另一个问题的答案: [UINavigationController retain]:发送到释放实例的消息
- CGLayerRef在NSValue – 什么时候调用retain()或release()?
- 什么时候应该从closures的ViewController类中观察持续的Model类调用removeObserver:forKeyPath?
- Objective-C中的自动释放池 – 释放主要的AutoreleasePool?
- 目标C:ViewController中的GestureRecognizer – >保留周期?
- iOS上通过RTMP上的H264videostream
- Objective-C中类的内存大小
- 在iOS应用程序中找不到遗弃的内存
- 安全的内存对于Swift对象
- NSAutoreleasePool。 什么时候适合创build一个新的自动释放池?