应该将viewDidUnload中的哪些内容移动到didReceiveMemoryWarning?

pet*_*ine 7 uiviewcontroller didreceivememorywarning ios viewdidunload ios6

在新的iOS 6中,viewDidUnload不推荐使用,我们已被指示使用它didReceiveMemoryWarning来管理UIViewController实例和子类中的对象.将nils分配给内部的UIView didReceiveMemoryWarning类似于内部的方式同样有效viewDidUnload吗?

我问这个是因为这两种方法似乎有所不同.似乎didReceiveMemoryWarning不能保证viewDidLoad再次调用以重新实例化任何必要的UIViews.

我怀疑在iOS 6中,内存管理完成后无需手动解除分配UIView.请帮助我了解在理解UIViewController的生命周期时我错过了什么.

Eik*_*iko 13

我首选的方法现在如下:

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    if (self.isViewLoaded && !self.view.window) {
        self.view = nil;
    }
    // Do additional cleanup if necessary
}
Run Code Online (Sandbox Code Playgroud)

请注意,测试self.isViewLoaded是必不可少的,否则访问视图会导致加载 - 即使WWDC视频也会错过.

如果您对子视图的其他引用是弱引用,则不必在此处将它们取消,否则您也希望将它们设置为nil.

你应该viewDidUnload完全摆脱,每个代码都应该移动到适当的位置.无论如何,无法保证在iOS 6之前调用它.