为什么我看到一些代码在viewDidUnload中释放的东西而不是dealloc?

时间:2011-06-08 04:15:46

标签: iphone ios memory-management

我所做的所有教程都说我在viewDidUnload中将stuff设置为nil,然后在dealloc中释放。但是我被告知这会导致内存泄漏,因为在dealloc之前调用viewDidUnload,因此我无法释放任何设置为nil的内容。

有人可以帮忙解释一下吗?

2 个答案:

答案 0 :(得分:4)

如果您在alloc中创建了一个对象(包含initviewDidLoad),则应release viewDidUnload。原因是有时调用viewDidUnload来节省内存,但不调用dealloc。然后,稍后可以再次调用viewDidLoad。通常,释放您在反向方法中分配的任何内容,例如

如果您在init中分配对象,请在dealloc中将其释放。

如果您在viewDidLoad中分配对象,请在viewDidUnload中将其释放。

如果您在viewWillAppear(或viewDidAppear)中分配对象,请在viewWillDisappear(或viewDidDisppear)中将其释放。

答案 1 :(得分:0)

在之前的@Sean中查看SO question给出的答案。他清楚地说明了在viewDidUnload

中释放的目的
  

最重要的原因之一   实现它是   UIViewController通常是子类   也包含拥有引用   视图中的各种子视图   层次结构。这些属性可能有   是通过IBOutlets设置的   从笔尖加载,或   以编程方式在-loadView中,用于   实例

     

子视图的额外所有权   通过UIViewController意味着   即使它的视图被删除了   查看层次结构并发布以保存   内存,子视图通过它   也是由观点发布,他们会   实际上并没有被解除分配,因为   UIViewController本身仍然存在   包含自己出色的保留   也引用了这些对象。   释放UIViewController   这些对象的额外所有权   确保他们将被解除分配为   好好释放记忆。

     

您在此处发布的对象是   通常重新创建并重新设置   UIViewController的视图是   从Nib或者重新加载   通过实施   -loadView。

     

还要注意UIViewController的   查看属性是时候这个   方法被称为。