有时会调用didReceiveMemoryWarning,但viewDidUnload不会调用。在我的情况下,我想在调用didReceiveMemoryWarning时强制执行viewDidUnload。
我可以这样说:
[self viewDidUnload];
但这真的会卸载观点吗?没有自己的“unloadView”。
答案 0 :(得分:5)
你为什么要这样做?只要你记得调用[super didReceiveMemoryWarning]
(假设你完全实现了这个方法),如果UIViewController的视图没有superview,它会自动卸载它的视图。如果此过程没有发生,通常表示视图仍然是视图层次结构的一部分,并且卸载是不安全的。
在极不可能的情况下,您确实需要手动卸载视图,只需说出self.view = nil
即可。
答案 1 :(得分:1)
为了测试我的viewDidUnload代码,我做了这个
-(void)forceUnload {
NSLog(@"forceUnload.enter");
[super didReceiveMemoryWarning];
NSLog(@"forceUnload.leave");
}
答案 2 :(得分:1)
我已经执行了大量的日志记录和断点设置调查,didReceiveMemoryWarning
在UIViewController
不是visibleViewController
时卸载视图。结果:UIViewController
的{{1}} 未被卸载 (在基于view
的项目中使用ARC测试)。您需要将UINavigationController
设置为nil,并在再次调用self.view
时将重新加载。即使记录self.view
也会重新初始化它 - 使用self.view
来测试它是否已加载,而不是检查isViewLoaded
的属性。
nil