有没有人有关于 iOS 如何处理 UINavigationController 堆栈的明确信息,用户可以继续向下钻取。它真的会通过保存先前控制器的状态来开始释放内存吗?
之前已经在这里问过这个问题,但答案是矛盾的,所以如果有人真的知道如何处理这个问题,那将非常有用。
如果没有,是否有人知道可以处理此问题的子类?
有没有人有关于 iOS 如何处理 UINavigationController 堆栈的明确信息,用户可以继续向下钻取。它真的会通过保存先前控制器的状态来开始释放内存吗?
之前已经在这里问过这个问题,但答案是矛盾的,所以如果有人真的知道如何处理这个问题,那将非常有用。
如果没有,是否有人知道可以处理此问题的子类?
基本上,这取决于控制器的实现。
当您继续将控制器推到导航控制器上时,最终内存会变低。但是,当内存不足时,您在导航控制器上推送的控制器不会为您释放。
发生的情况是您的控制器收到通知,该通知在您的控制器didReceiveMemoryWarning
方法中处理。在那里,您可以释放控制器中使用的所有不再需要的对象,或者可以在控制器弹出时重新创建。
内存是 iOS 中的关键资源,视图控制器提供内置支持以减少关键时刻的内存占用。UIViewController 类通过其 didReceiveMemoryWarning 方法提供了一些低内存条件的自动处理,该方法释放不需要的内存。
在 iOS 6 之前,当发生内存不足警告时,如果 UIViewController 类知道以后可以重新加载或重新创建它们,则它会清除其视图。如果发生这种情况,它还会调用 viewWillUnload 和 viewDidUnload 方法,让您的代码有机会放弃与视图层次结构关联的任何对象的所有权,包括从 nib 文件加载的对象、在 viewDidLoad 方法中创建的对象以及创建的对象在运行时懒惰地添加到视图层次结构中。在 iOS 6 上,视图永远不会被清除,并且这些方法永远不会被调用。如果您的视图控制器需要在内存不足时执行特定任务,它应该覆盖 didReceiveMemoryWarning 方法。