示例:
class A {
var fn: (() -> ())? = nil
}
class B {
let a = A()
init() {
a.fn = someFn
}
func someFn() {
}
}
现在我们有循环引用,因为B
拥有A
直接引用a
而A
隐含拥有B
所拥有的self
fn
关闭(如果我错了,请纠正我)。
可能的解决方案是:
'weak' may only be applied to class and class-bound protocol types
。a.fn = { [unowned self] in self.someFn() }
是正确的解决方案,但过于冗长。还有其他解决方案吗?