在loadView和init中初始化哪些数据更好

时间:2012-01-07 22:15:26

标签: ios uiviewcontroller viewdidload

当内存不足并且操作系统清理了视图时,我的理解是viewDidUnload是一个清理UIViewController使用的对象和内存的合适位置(否则它将不会被清理干净)视图层次结构)。然后,再次调用loadView以创建视图时,将重新初始化此数据。有人可以举例说明可以清理哪些东西(同样在loadView中初始化)?

我在loadView中初始化了一些数据,它为我的视图控制器设置了运行包含字幕,图像等的复杂动画脚本的阶段。我认为如果我的视图是这样的话,发布和清理这些数据是有意义的被操作系统删除(并且调用了viewDidUnload),但后来我想,为什么我不能在init中初始化那些数据并在dealloc中清理它而不是反复初始化和清理相同的数据(它没有' t根据加载或显示视图的时间而变化。这会是一个更好的地方吗?

基本上,我的想法是:

  1. 是的,我应该在init中初始化它并在dealloc中释放因为它永远不会改变
  2. 初始化loadView中的内容(以及随后在viewDidUnload中清理)是一种适当的做法,当数据将根据加载视图的时间进行不同的初始化时(或者当视图出现在viewWillAppear / viewWillDisappear中时更合适)它是释放内存的一个很好的选择,因为如果视图不活动,它会占用大量你想要释放的内存。
  3. 任何人都可以对我的问题和/或我的思路给出一些澄清吗?

1 个答案:

答案 0 :(得分:0)

如果您要在该视图与另一个视图之间往返,并且视图控制器将被保留,您可以将初始化移至init,并在dealloc中清除它。但你想要做的还是在- (void)didReceiveMemoryWarning中清理它(注意不要在self.view中使用didReceiveMemoryWarning,否则会重新加载视图:))。然后你可以使用延迟加载在viewDidLoad中重新加载它(即如果它尚不存在则初始化数据,否则不要)。

当然,你不能在init中进行任何初始化,这取决于存在的视图。viewDidLoad就是这个地方。