Ios 如何在UINavigationController堆栈中使用didReceiveMemoryWarning

Ios 如何在UINavigationController堆栈中使用didReceiveMemoryWarning,ios,cocoa-touch,didreceivememorywarning,Ios,Cocoa Touch,Didreceivememorywarning,我的应用在一个堆栈中有几个UIViewController(在UINavigationController下)。在某些情况下,当我在内部UIViewController中时,会收到内存警告(大多数情况下,如果设备因后台运行的其他应用程序而过载,则会发生这种情况)。当出现这些内存警告时,应用程序将继续运行(大多数情况下),然后当它返回到rootViewController时,将重新加载它,但不会填充视图对象(主要是UIButton图像) 我希望实现didReceiveMemoryWarning和A

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

我希望实现
didReceiveMemoryWarning
ApplicationIDReceiveMemoryWarning
,但我不清楚如何实现

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

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

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

根(其他)控制器应适当处理
viewDidLoad
,并能够在另一个
loadView
/
viewDidLoad
阶段循环


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

1。关于UINavigationController堆栈,您的意思是,当我在堆栈的第三个视图中时,系统转储第二个视图?2。我应该如何在根视图中实现?我的didReceiveMemoryWarning的起点是什么?我是否应该从didReceiveMemoryWarning内部调用loadView?1。对2.绝对不要从
direceive…
调用
loadView
,您永远不应该调用
loadView
,只应该实现它。根视图控制器只是stackOK上的另一个视图控制器,明白了。还有一件事,如果我想在didReceiveMemoryWarning生效之前(即调用viewDidLoad之前)保存一些数据,那么应用程序将使用在内存警告发生之前保存的数据重新加载根视图。你知道怎么做吗?通常使用
NSUserDefaults
来存储一些东西,比如表格视图的滚动位置和/或它的选择,当你收到
viewDidLoad
时,你可以重置该状态