• 06_常见的内存泄漏


    这篇文档上说的比较详细:https://www.jianshu.com/p/dd6775219869

    1.NSTimer的循环引用

    [NSTimer scheduledTimerWithTimeInterval:1.0 
                                     target:self 
                                   selector:@selector(updateTime:) 
                                   userInfo:nil 
                                    repeats:YES];

    理由: 这时 target: self,增加了ViewController的retain count,
    即self强引用timer,timer强引用self,造成循环引用。

    我使用的是在willAppear的时候创建 在willdisAppear的时候进行销毁可以解决这个问题。

    2.ViewController中的代理delegate

    理由:如果代理用strong修饰,ViewController(self)会强引用View,

    View强引用delegate,delegate内部强引用ViewController(self)。造成内存泄漏。

    解决方案:代理尽量使用weak修饰。


    3.Block

    理由:如果block被当前ViewController(self)持有,这时,如果block内部再持有ViewController(self),就会造成循环引用。

    解决方案:在block外部对弱化self,再在block内部强化已经弱化的weakSelf

    4. WKWebView 造成的内存泄漏

    理由: 但是其实 “addScriptMessageHandler” 这个操作,导致了 wkWebView 对 self 进行了强引用,然后 “addSubview”这个操作,也让 self 对 wkWebView 进行了强引用,这就造成了循环引用。

    解决方案: 解决方法就是在合适的机会里对 “MessageHandler” 进行移除操作。


    5.NSNotification记得移除
     
    对上述的代码,有任何疑问,可以在下方留言。 也可以给我发邮件咨询:673658917@qq.com 或者是直接加qq:673658917 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
  • 相关阅读:
    第 16 章 CSS 盒模型[下]
    第 16 章 CSS 盒模型[上]
    第 15 章 CSS 文本样式[下]
    第 15 章 CSS 文本样式[上]
    第 14 章 CSS 颜色与度量单位
    第 13 章 CSS 选择器[上]
    第 12 章 CSS 入门
    关于springboot上传文件报错:The temporary upload location ***is not valid
    Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)
    git命令-切换分支
  • 原文地址:https://www.cnblogs.com/lishanshan/p/14127954.html
Copyright © 2020-2023  润新知