在新的 iOS 6 中,viewDidUnload
已弃用,我们已被指示使用didReceiveMemoryWarning
相反,管理 UIViewController 实例和子类中的对象。将 nils 分配给内部的 UIView 类型是否同样有效didReceiveMemoryWarning
就像里面的做法一样viewDidUnload
?
我问这个问题是因为这两种方法的工作原理似乎不同。这好像是didReceiveMemoryWarning
不保证viewDidLoad
再次调用以重新实例化任何必要的 UIView。
我怀疑在 iOS 6 中,内存管理不需要手动释放 UIView 就可以完成。请帮助我了解我在理解 UIViewController 生命周期时错过了什么。
我现在首选的方法如下:
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
if (self.isViewLoaded && !self.view.window) {
self.view = nil;
}
// Do additional cleanup if necessary
}
请注意,测试self.isViewLoaded
这是必不可少的,否则访问视图会导致其加载 - 即使 WWDC 视频也往往会错过这一点。
如果您对子视图的其他引用是弱引用,则不必在这里将它们设为 nil,否则您也想将它们设置为 nil。
你应该摆脱viewDidUnload
完全,并且那里的每个代码都应该移动到适当的位置。无论如何,在 iOS 6 之前并不能保证它会被调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)