IOS处理内存警告

文章目录


当应用程序在内存占有率很高的情况下,系统就会抛出一个内存警告,如果不进行妥当的处理的话,很可能应用程序会被系统直接杀掉,即使不被杀死,不处理的话,内存占有率高也会影响应用的流畅程度。核心就是释放掉暂时不需要的内存,保证程序的流畅度,以及不被系统杀掉。

当有内存警告的时候就会自动调用:

- (void)didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
}

模拟内存警告:
在这里插入图片描述

释放掉没显示的视图:
一个变量记录当前显示的是哪个视图:

@property (nonatomic,weak)UIViewController *currentShowController;

在点击选择视图控制器的地方给他赋值:

- (void)tabBar:(CustomTabBar *)tabBar itemSelectedAtIndex:(NSUInteger)index{
  
    //UIView *view=self.viewArray[index];
    //[self.view bringSubviewToFront:view];
    if(index==0){
        [self.view bringSubviewToFront:self.ocController.view];
        _currentShowController=_cController;
    }
    else if(index==1){
        [self.view bringSubviewToFront:self.cController.view];
        _currentShowController=_cController;
    }
    else{
         [self.view bringSubviewToFront:self.javaController.view];
        _currentShowController=_javaController;
    }
    [self.view bringSubviewToFront:tabBar];
}

移除操作:
现将视图控制器从父视图控制器中移除,再将视图从父视图中移除,因为是强引用,所以要将对象设置成nil

        [self.javaController removeFromParentViewController];
        [self.javaController.view removeFromSuperview];
        [self setJavaController:nil];
- (void)didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
    if(self.currentShowController==self.ocController){
        [self.javaController removeFromParentViewController];
        [self.javaController.view removeFromSuperview];
        [self setJavaController:nil];
        [self.cController removeFromParentViewController];
        [self.cController.view removeFromSuperview];
        [self setCController:nil];
    }
    else if(self.currentShowController==self.javaController){
        [self.ocController removeFromParentViewController];
        [self.ocController.view removeFromSuperview];
        [self setOcController:nil];
        [self.cController removeFromParentViewController];
        [self.cController.view removeFromSuperview];
        [self setCController:nil];
    }
    else {
        [self.ocController removeFromParentViewController];
        [self.ocController.view removeFromSuperview];
        [self setOcController:nil];
        [self.javaController removeFromParentViewController];
        [self.javaController.view removeFromSuperview];
        [self setJavaController:nil];
    }
   
}

可以在释放的视图控制器里重写dealloc方法:

- (void)dealloc
{
    NSLog(@"OCViewController被释放");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值