didReceiveMemoryWarning - 手动卸载视图?

时间:2010-10-22 00:19:23

标签: iphone memory memory-management

有时会调用didReceiveMemoryWarning,但viewDidUnload不会调用。在我的情况下,我想在调用didReceiveMemoryWarning时强制执行viewDidUnload。

我可以这样说:

[self viewDidUnload];

但这真的会卸载观点吗?没有自己的“unloadView”。

3 个答案:

答案 0 :(得分:5)

你为什么要这样做?只要你记得调用[super didReceiveMemoryWarning](假设你完全实现了这个方法),如果UIViewController的视图没有superview,它会自动卸载它的视图。如果此过程没有发生,通常表示视图仍然是视图层次结构的一部分,并且卸载是不安全的。

在极不可能的情况下,您确实需要手动卸载视图,只需说出self.view = nil即可。

答案 1 :(得分:1)

为了测试我的viewDidUnload代码,我做了这个

-(void)forceUnload {
    NSLog(@"forceUnload.enter");
    [super didReceiveMemoryWarning];
    NSLog(@"forceUnload.leave");
}

答案 2 :(得分:1)

我已经执行了大量的日志记录和断点设置调查,didReceiveMemoryWarningUIViewController不是visibleViewController时卸载视图。结果:UIViewController的{​​{1}} 未被卸载 (在基于view的项目中使用ARC测试)。您需要将UINavigationController设置为nil,并在再次调用self.view将重新加载。即使记录self.view也会重新初始化它 - 使用self.view来测试它是否已加载,而不是检查isViewLoaded的属性。

nil