今天遇到一个问题:在ios程序收到内存警告后,程序调用当前不可见视图的viewdidunload时,出现controller马上调用viewdidload的情况,程序给出警告——“viewdidunload的实现导致视图reload,这将会严重影响系统性能”。
错误信息:
MyViewController implementation of -viewDidUnload caused the view to be reloaded. This will adversely impact system performance.
查找资料后发现,这是由于在viewdidunload中使用了controller的view属性造成的。原因是view释放之后系统调用的viewdidunload,这时再调用view,controller需要重构view。于是出现了前面的一幕。解决办法是去掉对controller的view的调用。
另外,如果想保持controller的视图在收到内存警告后不被系统自动释放,有如下办法:
1、重载controller的didReceiveMemoryWarning方法,不过需要注意一点,要注释以下语句:
//[super didReceiveMemoryWarning];
2、重载controller的setView:方法:
-(void)setView:(UIView*)view {
if(view != nil || self.okayToUnloadView) {
[super setView:view];
}
}