2012-01-07 98 views
2

当内存不足和视图得到操作系统清理时,我的理解是,viewDidUnload是一个适当的地方清理UIViewController使用的对象和内存(否则wouldn'作为处于视图层次结构中的函数进行清理)。当再次调用loadView来创建视图时,这些数据会被重新初始化。有人可以给出什么样的事情可以清理的例子(并且同样在loadView中初始化)?什么数据最好在loadView初始化初始化

我在loadView中初始化了一些数据,它为我的视图控制器设置了一个舞台,用于运行涉及标题,图像等的复杂动画脚本。我认为如果我的视图是释放和清理数据, (并调用viewDidUnload),但后来我想,为什么我不能在init中初始化这些数据,并在dealloc中清理它,而不是重复初始化和清理相同的数据(它不会作为视图加载或显示时间的函数而不会改变)。这会是一个更好的地方吗?

基本上,我的想法是:

  1. 是的,我应该只是初始化它的init和dealloc的释放,因为它永远不会改变
  2. 初始化事情的loadView(并随后在viewDidUnload清洗)是合适的练习何时这些数据将根据何时加载视图来进行不同的初始化(或者当视图出现在viewWillAppear/viewWillDisappear时更加适当)这对于释放内存是一个很好的选择,因为它占用了大量内存如果视图不活跃,我希望看到解脱。

任何人都可以给我一些澄清我的问题和/或我的思路吗?

回答

0

如果您要在该视图和另一个视图之间来回切换,并且视图控制器将保留在周围,那么您确实可以将初始化移动到init,并将其清理为dealloc。但你想要做的也是清理它在- (void)didReceiveMemoryWarning(注意不要使用self.viewdidReceiveMemoryWarning否则,将重新加载视图:))。那么你可以使用延迟加载在viewDidLoad中重新加载它(即如果它不存在然后初始化数据,否则不要)。

当然,你不能在init做任何初始化,这取决于视图存在.. viewDidLoad是那个地方。