iPhone开发 - 在init或viewDidLoad中

问题描述:

在我UIViewController子类创建阵列我应该初始化为UIPickerView数据的NSArray在init或在viewDidLoad中,为什么?谢谢。iPhone开发 - 在init或viewDidLoad中

我只能说这在viewDidLoad作为视图可装载超过一次(也被卸载,因此你可能还需要重新加载您的阵列)。

此外,它在iPhone上懒洋洋地加载数据的大部分时间是个好主意。在viewDidLoad中加载数据比使用init要缓慢得多,如果您初始化,最终可能会对您的性能更好,但不会立即使用您的视图控制器。在初始化这样

+0

好吧,这是有道理的,但你可以告诉我什么时候调用viewDidUnload?我知道,当视图已经卸载,但是什么时候会自动发生?我怎样才能手动卸载它? – mk12 2009-08-17 01:36:31

+1

当UIViewController收到内存警告时,该视图将被UIViewController卸载,此时它将调用viewDidUnload。如果你确实在viewDidLoad中创建了你的数组,你必须确保在viewDidUnload中销毁它。如果视图不可见,则必须确保它永远不会被访问(如果可见,视图永远不会被卸载)。如果您确实需要访问它(例如,更新它),即使您的视图不可见,我也建议在init中创建它。 Apple建议仅​​将viewDidLoad用于可轻松重新创建的对象。 – 2009-08-17 12:22:17

+0

在init中创建它的替代方法是将数组定义为属性,并在第一次访问时懒洋洋地创建该数组。最终结果与init方法相同,但是如果您从不访问数组,它将不会使用内存。 – 2009-08-17 12:24:39

这取决于正是你想要的阵列来存储,以及你打算如何初始化。 viewDidLoad可以被多次调用(特别是在向程序发送低内存警告之后 - 不活动的视图控制器将卸载它们的视图,然后在它们变为活动或再次可见时重新加载它们),而init通常只会在一生中被调用一次的对象。

一种情况,就是viewDidLoad中可以viewWillAppear中后调用。如果你依赖当时存在的数组,则可能需要将init初始化。

一般来说,viewDidLoad中是一个相当不错的地方,只要你记住它可以被调用一次以上。