如何使用[unowned self]语义将方法赋值给变量

时间:2017-01-04 16:36:48

标签: swift memory-leaks

示例:

class A {
   var fn: (() -> ())? = nil
}

class B {
   let a = A()
   init() {
      a.fn = someFn
   }

   func someFn() {
   }
}

现在我们有循环引用,因为B拥有A直接引用aA隐含拥有B所拥有的self fn关闭(如果我错了,请纠正我)。

可能的解决方案是:

  1. 弱var fn对我的情况不利,因为我不仅要分配方法。 'weak' may only be applied to class and class-bound protocol types
  2. a.fn = { [unowned self] in self.someFn() }是正确的解决方案,但过于冗长。
  3. 还有其他解决方案吗?

0 个答案:

没有答案