3

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

我希望实现didReceiveMemoryWarningand applicationDidReceiveMemoryWarning,但我不清楚如何做到这一点。

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

  • 我应该如何执行?
  • 我应该didReceiveMemoryWarning在每个 UIViewController 中实现默认值吗?
  • 由于内存警告总是发生在内部 UIViewControllers 中,我应该如何让它rootViewController知道它应该运行didReceiveMemoryWarning
  • 我怎么知道rootViewController它应该做哪些设置?换句话说 - 我可以将设置保留在didReceiveMemoryWarning不删除它们的地方,并在激活didReceiveMemoryWarning“召回”它们时让用户看到他们开始“关卡导航”的同一屏幕吗?
4

1 回答 1

3

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

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

如果您希望状态相同,则需要保留所有这些信息。NSUserDefaults 是执行此操作的标准位置。

于 2011-07-16T17:13:38.953 回答