首页 » 移动 » swift中坑爹的block循环引用

swift中坑爹的block循环引用

 

class A: NSObject {

  var doSth: ((String?) -> ())?

}

 

class B: NSObject {

  init() {

    let a = A()

    a.doSth = doSth

  }

  var doSth: ((String?) -> ())?

}

 

这种情况下,A执行 doSth 是可以调用到 B 中的方法,但是会有一个循环引用的问题, A->(strong)B, B->(strong)A。

当设置 B = nil 的时候不能正确释放掉资源,应该修改 B 中 a 的赋值方法,设为弱引用:

let a = A()

  a.doSth = { [weak self] value in

  self?.doSth(value)

}

原文链接:swift中坑爹的block循环引用,转载请注明来源!