美文网首页
内存警告处理

内存警告处理

作者: 健健锅 | 来源:发表于2019-01-22 16:52 被阅读12次

    https://blog.csdn.net/wangyanchang21/article/details/50730902

    1)当应用可用内存过低导致系统发出内存警告的时候,便会触发此方法。
    (2)清除不需要的视图,满足以下两个条件:1.视图已经被创建 2.不需要在 window 上显示了
    (3)当从写此方法时,需要调用父类。调用super的didReceiveMemoryWarning只是释放controller的resouse,不会释放view。
    (4)具体过程:当系统内存不足时,首先UIViewController的didReceiveMemoryWarining 方法会被调用,而didReceiveMemoryWarining 会判断当前ViewController的view是否显示在window上,如果没有显示在window上,则didReceiveMemoryWarining 会自动将viewcontroller 的view以及其所有子view全部销毁,然后调用viewcontroller的viewdidunload方法。如果当前UIViewController的view显示在window上,则不销毁该viewcontroller的view,当然,viewDidunload也不会被调用了。


    作者:DCSnail-蜗牛
    来源:CSDN
    原文:https://blog.csdn.net/wangyanchang21/article/details/50730902
    版权声明:本文为博主原创文章,转载请附上博文链接!

    一个App 有 3个 tab,A 、B、C。(都从viewController继承,并且都实现了didReceiveMemoryWarning)。当程序启动的时候,默认显示tab A,这个时候,A 的 viewDidload被调用,并且加载数据显示给用户。然后我们切换到 tab B,B会重复A的加载过程。
    这时候系统产生了一个内存警告,A、B、C 3个对象都会受到警告。
    
    A对象:因为它已经不在当前UI显示了,所以满足[self.view window] == nil,相关view被释放。
    B对象:正在显示,所有didReceiveMemoryWarning什么也不会干。
    C对象:最悲惨,从来没有显示过,viewDidload从来没调用过,也没有显示过。然后有个self.view .这句的调用会导致一个结果,就是C对象的viewDidload会被调用一次,于是他的逻辑就是释放前先创建一次,然后再把自己释放,是不是很悲剧。(所以apple给的方案也不一定完美靠谱)
    

    作者:DCSnail-蜗牛
    来源:CSDN
    原文:https://blog.csdn.net/wangyanchang21/article/details/50730902
    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

          本文标题:内存警告处理

          本文链接:https://www.haomeiwen.com/subject/kshrjqtx.html