在iOS中,导航时附加到控制器的对象会发生什么?

时间:2015-10-17 23:01:50

标签: ios swift2

我正在Swift 2中构建一个iOS应用程序,我通常在每个ViewController中创建一个“Manager”类,它在ViewDidLoad中保存有关该视图的一些数据。这些是非常轻量级的对象,因此重新加载它们并不是什么大问题。

但我想知道这里的典型生命周期:只有在第一次实例化UIViewController并显示屏幕时才调用“ViewDidLoad”?或者,即使只是通过后续屏幕中的“后退”,每次用户访问时都会调用它?将应用程序发送到后台并重新打开时会调用它吗?

在显示数据时,您要在哪里放置一个您想要引用的数据对象? (不是持久的意义 - 我已经涵盖了这一点。)

在相关的情况下,如果我在didReceiveMemoryWarning中释放一些内存(“处理可以重新创建的任何资源”),那么我何时会重新创建它们?这是仅在未加载/显示视图时调用,因此我总是可以在viewDidLoad中进行检查吗?

您可以了解如何在iOS应用中管理对象/内存中持久性的任何见解。

1 个答案:

答案 0 :(得分:2)

当您通过推动新的视图控制器或呈现新的视图控制器离开视图控制器时,原始视图控制器仍在内存中。

它具有强引用的任何对象也将保存在内存中。

如果内存压力过大,最终您的应用程序将被操作系统杀死。在此之前,您的视图控制器将触发方法didReceiveMemoryWarning。 (即使不在屏幕上)。这是您摆脱所有可轻松恢复的轻量级数据的机会。

就生命周期而言。

init被调用一次。 (显然)

首次访问控制器的viewDidLoad属性时,将调用

view

viewDidAppearviewWillAppear等等......被多次调用。当视图进入屏幕或从屏幕上消失时。

您还可以使用属性isBeingPresentedisMovingToParent等...确定视图控制器出现或消失的确切原因。 (您可以在文档中找到其他几个)。

在objective-c中,我会为这种数据做的是创建一个在首次访问时加载的惰性属性。然后在内存警告中将该属性设置为nil。然后,当我再次需要它时,它会再次加载。

在swift中,我确信会有类似的方式,但我不能100%确定它是什么。