在我的应用程序中,我一直在寻找内存泄漏一段时间.截至目前,当我在观看记忆监视器的同时在两个视图之间来回切换时,实际内存在5到6兆之间波动.这一切都很好 - 据我所知,当我从视图中弹出时,一切都正常释放.但是,每次将视图推回到视图堆栈时,虚拟内存都会继续增加并且我的可用实内存会迅速下降(即使应用程序的实际内存使用量没有增加).最终,这一切都会导致内存崩溃.这是任何特定问题的明显标志,还是我在某处错过了内存泄漏?
编辑:奇怪的是,我得到一个内存不足崩溃,而应用程序仍然只使用大约5兆的实内存.
对象的绝对保留计数是没有意义的.这是一个实现细节.它可能会受到许多因素的影响,远远超出您的代码.
您应该调用release
与保留对象完全相同的次数.不会少(除非你喜欢泄漏),当然,没有更多(除非你喜欢崩溃).
有关完整详细信息,请参阅内存管理指南
在这种特定情况下,您正在泄漏内存,但泄漏无法找到它.泄漏的对象仍以某种方式连接到整个应用程序的对象图.也许通过通知,也许通过委托,无所谓 - 泄漏看到了参考,并得出结论,该对象可能仍然存在.
使用分配工具.将其配置为仅跟踪实时分配(因为您不关心已解除分配的对象).用你的应用程序做一些事情.看看Allocations知道什么,并解释为什么所有这些对象应该坚持下去.您可以使用数据挖掘工具过滤到您的对象.