RxSwift
是一个强大的功能,但有时候我会把自己射到腿上。
问题包括Resource count
和对象释放。
我想在View Model中使用lazy var
作为CocoaAction
。它在这个流程中工作正常:
lazy var onCancel: CocoaAction = { [unowned self] _ in
return CocoaAction {
return self.coordinator.pop()
}
}()
Controller
和View Model
已从内存中移除 - 很好!
当我尝试使用外部self
值时,会出现问题(对象无法删除,因为操作会强大reference
到self
)。如何避免在这里骑行?
lazy var onCancel: CocoaAction = { this in
return CocoaAction {
return this.coordinator.pop()
}
} (self)
答案 0 :(得分:0)
在这两种情况下,您都需要将弱引用传递给CocoaAction
以避免保留周期。你的第一个案例是有效的,因为你将无主self
传递给第一个闭包,最终传递给第二个闭包而不增加保留计数。在第二种情况下,将self
作为名为this
的参数传递给闭包,并将this
传递给具有强引用的第二个闭包。所以,你必须把它传递给它。
不要忘记将TypeOfSelf
更改为您所在的类的名称。这是必需的,否则编译器将无法推断出类型。
lazy var onCancel: CocoaAction = { (this: TypeOfSelf) in
return CocoaAction { [unowned this] _ in
return this.coordinator.pop()
}
}(self)