• 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 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
  • 相关阅读:
    GIS的核心价值——服务
    Arcgis Add-In开发入门实例
    Arcgis for Androd API开发系列教程(一)——地图显示与GPS定位
    Spring
    字体大小对照换算表
    属性和字段的区别
    sqlDataAdapter和SqlCommand的区别
    C# 连接SQL Server数据库的几种方式--server+data source等方式
    c# using的作用
    random
  • 原文地址:https://www.cnblogs.com/lishanshan/p/14127954.html
Copyright © 2020-2023  润新知