zoukankan      html  css  js  c++  java
  • 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。

     

  • 相关阅读:
    关于float和double类型能表示的数据范围和精度分析
    P2737 [USACO4.1]麦香牛块Beef McNuggets 数学题 + 放缩思想
    csu 1554: SG Value 思维题
    csu 1551: Longest Increasing Subsequence Again BIT + 思维
    Rasheda And The Zeriba Gym
    cpc,a wonderful concert
    hdu_3308 区间合并
    poj_3667线段树区间合并
    poj_2777线段树+位运算
    poj_3468,线段树成段更新
  • 原文地址:https://www.cnblogs.com/vicstudio/p/3104814.html
Copyright © 2011-2022 走看看