我所做的所有教程都说我在viewDidUnload中将stuff设置为nil,然后在dealloc中释放。但是我被告知这会导致内存泄漏,因为在dealloc之前调用viewDidUnload,因此我无法释放任何设置为nil的内容。
有人可以帮忙解释一下吗?
答案 0 :(得分:4)
如果您在alloc
中创建了一个对象(包含init
和viewDidLoad
),则应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的 查看属性是时候这个 方法被称为。