2015-10-17 67 views
2

我正在Swift 2中构建一个iOS应用程序,并且通常在每个ViewController中创建一个“Manager”类,该ViewController类在ViewDidLoad中包含有关该视图的一些数据。这些都是非常轻量级的对象,所以重新加载它们并不是什么大问题。在iOS中,导航时连接到控制器的对象会发生什么?

但我想知道典型的生命周期在这里:是“ViewDidLoad”调用只有当一个UIViewController第一次实例化和屏幕显示?还是每次用户访问时都会调用它,即使只是通过后面的屏幕上的“返回”?它是否在应用程序发送到后台并重新打开时调用?

你将在哪里放置一个数据对象,你想在显示数据时参考? (不是持久的意义 - 我已经说过了)。

与此相关,如果我在didReceiveMemoryWarning(“Dispose of any resources that can be created”)中释放了一些内存,那么我何时会重新创建它们?只有当视图没有加载/显示时才调用它,所以我总是可以在viewDidLoad中进行检查吗?

任何洞察力,你可以给我如何在iOS应用程序中管理对象/内存中的持久性,值得赞赏。

+1

iOS文档中的“视图控制器编程指南”涵盖了生命周期。 – rmaddy

+0

谢谢Maddy。我显然是Swift的新手。 –

回答

2

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

它有强烈的参考意义的任何对象也将被保存在内存中。

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

就生命周期而言。

init被调用一次。 (很明显)

viewDidLoad在第一次访问控制器的view属性时被调用一次。

viewDidAppearviewWillAppear等...被称为多次。当视图进入屏幕或从屏幕消失时。

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

在Objective-C是什么,我会为这种数据做的是创建时,第一次访问它加载一个懒惰的财产。然后在内存警告中将该属性设置为零。然后当我再次需要它时,它会再次加载。

在迅速,我相信会有类似的方式,但我不是100%确定它是什么。

+0

斯威夫特其实也有懒惰的变数。感谢你的回答!! –

相关问题