• iOS 6.0不同版本内存警告的统一处理


    在iOS6.0以下,当系统收到内存警告,会先调- (void)didReceiveMemoryWarning ,不在当前页面的controller会继续调- (void)viewDidUnload 去释放不必要的view,所以我们可以在viewDidUnload把某些子view释放以回收内存。

    但是在iOS6.0以上,controller只会收到didReceiveMemoryWarning,不再调用viewDidUnload,也就是苹果不会去主动释放view。所以我们可以封装以下,让6.0以上和以下版本收到内存警告都统一调一个函数,以用来释放子view。

    代码如此:写一个基类BaseViewController,实现如下方法,这样子类内存警告的处理都放在了viewShouldUnLoad。

    - (void)viewShouldUnLoad {

        // 子类中去实现

    }

    // IOS6.x 不再会调到此方法

    - (void)viewDidUnload {

        [super viewDidUnload];

    //统一调viewShouldUnLoad

       [self viewShouldUnLoad];

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

         //如果view还没生成,不用做任何事

        if (![self isViewLoaded]) {

            return;

        }

    //6.0以上,判断如果不是当前使用的controller,就把view释放(这个判断函数大家可以自己写)

        if ([[UIDevice currentDevice] systemVersionNotLowerThan:@"6.0"]) {

            if (self.view.window == nil)// 是否是正在使用的视图

            {

                [self viewShouldUnLoad];

                self.view = nil;// 目的是再次进入时能够重新加载loadview

            }

        }

    }

     

    子类的controller都继承BaseViewController,这样内存警告的处理都添加在viewShouldUnLoad,以防止6.0以上内存警告没有释放不必要的view。

     

  • 相关阅读:
    CentOS优化
    C++ 与OpenCV 学习笔记
    常用ubuntu命令
    对极几何笔记
    DBoW2 词袋模型笔记
    OKVIS(一)初始化流程及代码结构
    二进制描述子 BRIEF(ORB), BRISK, FREAK
    VIO 初始化小结
    VINS(十)FeatureManager(未完待续)
    VINS(九)Ceres Solver优化(未完待续)
  • 原文地址:https://www.cnblogs.com/vicstudio/p/3104814.html
Copyright © 2020-2023  润新知