我有一个UITableiew列出n个联系人,并从表视图委托didSelectRowAtIndexPath我使用 UINavigationController pushviewcontroller 导航到'Contactview'UIViewController。
对于一个实例,如果我将第一个联系人导航到Contactview,则Live Bytes内存从 1 MB增加到3 MB 。然后,当我点击后退按钮时,会调用viewcontroller delloc 方法,但内存仍然保持 2.95MB到3MB 。我的问题是,当调用viewcontroller delloc 方法时,应该释放viewcontoller的内存吗?我错了吗?如果我错了,请建议我。我正在使用ARC项目。
先谢谢..
答案 0 :(得分:5)
如果您前后移动导航并且看到内存无限攀爬,则会出现内存管理问题。 即使使用ARC ,您也可能放弃了内存。您可以使用Instruments中的Allocations模板检测它。
如果每个快照中仍存在几乎恒定数量的静止物体,请单击其中一个快照中的右箭头按钮,您将看到所有仍然存在的物体。查找可能由您创建的对象,选择一个,展开它,然后通过简单的单击选择其内存地址。然后单击扩展详细信息按钮以查看显示对象分配位置的堆栈跟踪。有了这个代码上下文,我相信你会理解为什么你的记忆被抛弃了。
答案 1 :(得分:0)
请参阅..有一件事ARC将在未来的某个地方发布它的内容。它自动正确..如何能够期待ARC在课后进行Gatrbage集合将消失。它可能需要一些时间来释放内存。 / p>
答案 2 :(得分:0)
你检查了retainCount吗?是显示你想要的价值吗?
答案 3 :(得分:0)
UIImage为您优化缓存图像,因此这是预期的行为。
如果您想确认是这种情况,为了安心,您可以强制执行低内存警告(在模拟器的硬件菜单下)。这应该让UIImage抛弃它的缓存。
您也可以使用此私有方法,但当然在提交之前将其丢弃。
[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
答案 4 :(得分:0)
您可能拥有代码中其他位置的视图控制器的强引用。你应该确定它是否真的被解除分配...如果任何其他对象在导航控制器之外引用它,它将不会被释放。尝试覆盖dealloc。 (您也可以在ARC项目中覆盖dealloc,不允许使用保留计数操作调用。)为了确保调用dealloc,请将一些日志记录或某些可调试代码放入该方法中。