您的当前位置:首页swift的内存泄漏释放对象闭包强引用问题

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

2024-12-14 来源:哗拓教育

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()
            }
显示全文