zoukankan      html  css  js  c++  java
  • 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 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
  • 相关阅读:
    vue入门:(方法、侦听器、计算属性)
    vue入门:(模板语法与指令)
    前端资源
    CSS3总结七:变换(transform)
    CSS总结六:动画(一)ransition:过渡、animation:动画、贝塞尔曲线、step值的应用
    设计模式(一):简单工厂
    正则命令积累
    命令模式 & 策略模式 & 模板方法
    抽象工厂:简单游戏角色
    简单工厂模式—>工厂模式
  • 原文地址:https://www.cnblogs.com/lishanshan/p/14127954.html
Copyright © 2011-2022 走看看