我有一个应用程序,用户可以无限深入到视图中(推送到导航堆栈中)。在某些情况下,会出现内存警告。我想从导航控制器中删除视图控制器,并取消分配它们。如果用户返回到这些视图控制器,我希望重新创建视图控制器,并将它们推回到堆栈中的正确位置。
这是思考这个问题的正确方式吗?
有没有开源项目可以做到这一点?这似乎并不是一个罕见的问题,我宁愿不要重新发明轮子。
发布于 2014-06-24 03:26:21
有一段时间,您需要确保对viewDidLoad和viewDidUnload的调用正确匹配,以便以这种方式处理内存警告。从iOS 6开始,这不再是必要的。
正如它在viewDidUnload文档中所说的
在iOS 5和更早版本中,当出现内存不足的情况并且不需要当前视图控制器的视图时,系统可以选择在释放视图控制器的视图后调用此方法。此方法是您执行任何最终清理的机会。如果视图控制器存储了对视图或其子视图的单独引用,则可以使用此方法释放这些引用。您还可以使用此方法删除对任何对象的引用,这些对象是为支持视图而创建的,但在视图消失后不再需要这些对象。您不会使用此方法来释放用户数据或任何其他无法轻松重新创建的信息。
在iOS 6和更高版本中,在视图控制器中清除对视图和其他对象的引用是不必要的。
如果您手动将大型对象保存在内存中,例如图像或视频数据,则可以覆盖didReceiveMemoryWarning以在必要时释放这些对象。
https://stackoverflow.com/questions/24373489
复制相似问题