关于viewDidUnload导致视图reload的问题

本文讨论了iOS程序中遇到内存警告后,当尝试调用不可见视图的viewdidunload时,如何避免视图reload导致的系统性能影响。提供了解决方案包括重载controller的didReceiveMemoryWarning和setView方法,确保在收到内存警告后视图不被系统自动释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         今天遇到一个问题:在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];
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值