如何在UINavigationController堆栈中使用didReceiveMemoryWarning

时间:2011-07-16 16:53:53

标签: ios cocoa-touch didreceivememorywarning

我的应用程序在堆栈中有多个UIViewControllers(在UINavigationController下)。在某些情况下,当我在内部UIViewControllers中时,我会收到内存警告(如果设备因在后台运行的其他应用程序而过载,则会发生这种情况)。当这些内存警告发生时,应用程序继续运行(大多数时间),然后当它返回到rootViewController时,它会重新加载它,但不会填充视图对象(主要是UIButton图像)。

我希望实施didReceiveMemoryWarningapplicationDidReceiveMemoryWarning,但我不清楚如何做到这一点。

我正在寻找的最终结果是,当应用程序在内存警告后执行此“重新加载”时,它将“重新加载”rootViewController处于用户开始“潜入”内部之前的状态UIViewControllers。

  • 我应该如何实施?
  • 我应该在每个UIViewController中实现默认的didReceiveMemoryWarning吗?
  • 由于内存警告总是出现在内部UIViewControllers中,我应该如何让rootViewController知道它应该运行didReceiveMemoryWarning
  • 如何告诉rootViewController应该执行哪些设置?换句话说 - 我可以将设置保留在didReceiveMemoryWarning不删除它们的位置,并在激活didReceiveMemoryWarning时“调用”它们以便用户看到相同的屏幕,他们从“级别导航”开始了吗?

1 个答案:

答案 0 :(得分:3)

UINavigationController堆栈上的任何不可见的视图控制器都将转储其视图。它还会向您发送警告。如果视图控制器拥有大型数据结构,则应尽可能转储它们。

根(其他)控制器应该适当地处理viewDidUnload并能够循环通过另一个loadView / viewDidLoad阶段。

如果您希望状态相同,则需要保留所有信息。 NSUserDefaults是一个标准的位置。