美文网首页ios专题
swift的内存泄漏释放对象闭包强引用问题

swift的内存泄漏释放对象闭包强引用问题

作者: HeavenWong | 来源:发表于2016-08-23 15:59 被阅读143次

1. 什么时候会发生循环引用

  • 原理跟oc中的block相似, 有强指针记住它, 就很容易强强引用导致无法释放对象, 导致内存泄漏, 发生莫名的错误..
2. 怎么解决循环引用
  oc里面避免强强引用, 在使用到self的时候, 使用__weak来修饰self, 将self变为弱引用, 避免强强引用
 swift里面有三种方法可以将强引用--`转换`-->弱引用
  • 1 . 使用weak修饰变量, 打破强引用, 因为使用weak修饰的变量有一次变成nil的机会

  • 2 . 使用[weak self] 修饰闭包原理跟__weak类似, 这样在闭包中使用self, 就是弱引用

  • 3 . 使用[unowned self ] 修饰闭包, 跟__unsafe_unretained类似, 不安全, 不推荐使用

3. 示例代码

  • 1 . weak
weak var weakSealf = self
  • 2 . [weak self] 推荐使用
 buttonView.clickBasisBtnBlock = {
// 用到强引用的时候在使用[weak self]修饰闭包对象
                [weak self](clickButtonType:clickBasisBtnType)->Void in
                self!.resignTextFieldResponder()
            }
  • 3 . [unowned self ] 不推荐使用
 buttonView.clickBasisBtnBlock = {
// 不推荐使用
               [unowned self ]()->Void in

                self!.resignTextFieldResponder()
            }

相关文章

  • iOS内存泄漏易错点

    问题 记录一个内存泄漏的案例,闭包引用自己或者多个对象,导致对象无法正常销毁,从而导致内存泄漏。 上面例子的闭包中...

  • swift的内存泄漏释放对象闭包强引用问题

    1. 什么时候会发生循环引用 原理跟oc中的block相似, 有强指针记住它, 就很容易强强引用导致无法释放对象,...

  • Swift--内存管理

    Swift内存管理概述 强引用循环 打破强引用循环 闭包中的强引用循环 Swift内存管理概述 Swift中的AR...

  • 闭包与对象this

    闭包步骤 三根绿线引用导致不回收。所以AO不释放占用内存,以为AO释放导致内存泄漏 释放闭包:理论上三根线任意剪断...

  • swift 学习之自动引用计数

    学习和研究的主要是“实例对象和实例对象直接的相会强引用所产生的内从泄漏”和“使用闭包产生的强引用造成的内存泄漏”注...

  • 常见的内存泄漏

    内存泄漏的常见情况 1、对象之间的循环引用,循环引用的实质是:多个对象之间相互有强引用,不能释放让系统回收,解决办...

  • kkbox-ios-dev笔记(三) - 内存管理/代理

    内存管理(一) 内存泄漏:该释放的对象, 没有被释放(已经不再使用的对象, 没有被释放)无效内存引用:内存已经被释...

  • 使用 Proxy 解决对象之间循环引用

    循环引用(Circular Reference)是指两个对象之间相互强引用,两者无法按时释放,从而导致内存泄漏,是...

  • Swift入门二(对象函数)

    函数 闭包 GCD 尾随闭包 闭包循环引用解决(OC) 闭包循环引用解决(swift推荐) 面向对象 命名空间: ...

  • swift语法02

    Swift面向对象 01-闭包的循环引用 循环引用形成条件闭包中访问了self或者self的属性/方法必须有一个强...

网友评论

本文标题:swift的内存泄漏释放对象闭包强引用问题

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