我有一个应用程序,用户可以无限深入地推入视图(推送到导航堆栈)。在某些时候,会有一个记忆警告。我想从导航控制器中删除视图控制器并取消它们。如果用户返回到那些视图控制器,我想重新创建视图控制器并将它们推回到堆栈中的正确位置。
这是考虑这个问题的正确方法吗?
是否有一个开源项目可以做到这一点?它似乎不是一个罕见的问题,我宁愿不重新发明轮子。
答案 0 :(得分:2)
有段时间您需要确保对viewDidLoad
和viewDidUnload
的调用正确匹配,以便可以通过这种方式处理内存警告。从iOS 6开始,不再需要这样做了。
正如viewDidUnload
的文档中所述:
在iOS 5及更早版本中,当出现内存不足的情况时 当前视图控制器的视图不需要,系统可以选择 在视图控制器的视图之后调用此方法 释放。这种方法是您进行任何最终清理的机会。如果 视图控制器存储了对视图或其视图的单独引用 子视图,您可以使用此方法来释放这些引用。您 也可以使用此方法删除对任何对象的引用 您创建的是为了支持视图,但现在不再需要了 观点消失了。您不会使用此方法来释放用户数据 或任何其他无法轻易重建的信息。
在iOS 6及更高版本中,清除对视图和其他对象的引用 你的视图控制器是不必要的。
如果您手动将大对象保留在内存中(例如图像或视频数据),则可以覆盖didReceiveMemoryWarning
以在必要时释放这些对象。