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循环引用,转载请注明来源!