【发布时间】:2020-09-04 19:34:46
【问题描述】:
作为标题,无论如何都需要调用disposed(by:)吗?如果是,为什么?
考虑一个像这样的简单示例:
class ViewController: UIViewController {
let button = UIButton()
override func viewDidLoad() {
button.rx.tap.bind(onNext: { _ in
print("Button tapped!")
})
// Does this make any retain cycle here?
}
}
【问题讨论】:
-
是的,例如当你希望监听器在创建控制器被销毁时也被销毁
-
是的,只是因为当你查看控制器会被释放,那么
disposebag会被释放,内存会被清理,也不会形成retain循环。 -
但在上面的简单示例中,您不需要 DisposeBag。当视图控制器被释放时,订阅被释放。
-
使用 DisposeBag 是一种很好的做法,但并不总是必要的。还有其他方法可以处理订阅,例如 takeUntil。你可以阅读更多here。
-
@FabioFelici 是的。并且按钮
tap序列在内部使用takeUntil。这就是为什么我上面的例子很好。