RX 继电器从未被处理过吗?
Are rx relays never disposed?
阅读 Rx relays
它说他们从不完成或发出错误:https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Subjects.md
- 这是否意味着除非您手动销毁它们,否则它们永远不会销毁,就像这样:
let disposable: Disposable?
override func viewDidLoad() {
super.viewDidLoad()
disposable = viewModel.myRelay.subscribe(onNext: { //do stuff })
}
override func viewWillDisappear() {
super.viewWillDisappear()
disposable.dispose()
}
所以挂钩 .dispose(by: disposeBag)
是没有意义的,对吧?
除非手动disposed
,否则中继不会造成内存泄漏吗?
订阅将在其源发出停止事件(完成或错误)或调用其一次性 dispose()
时进行处理。中继从不发出停止事件是正确的,因此释放来自中继的订阅的唯一方法是处置它们。
要处理此类订阅,您可以手动处理,或您可以将一次性用品放入处理袋中。 DisposeBag 在 deinit
ed 时对其包含的所有一次性用品调用 dispose()
。所以:
final class Example: UIViewController {
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.myRelay
.subscribe(onNext: { /* do stuff */ })
.disposed(by: disposeBag)
}
}
足够了,最佳实践。
阅读 Rx relays
它说他们从不完成或发出错误:https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Subjects.md
- 这是否意味着除非您手动销毁它们,否则它们永远不会销毁,就像这样:
let disposable: Disposable?
override func viewDidLoad() {
super.viewDidLoad()
disposable = viewModel.myRelay.subscribe(onNext: { //do stuff })
}
override func viewWillDisappear() {
super.viewWillDisappear()
disposable.dispose()
}
所以挂钩
.dispose(by: disposeBag)
是没有意义的,对吧?除非手动
disposed
,否则中继不会造成内存泄漏吗?
订阅将在其源发出停止事件(完成或错误)或调用其一次性 dispose()
时进行处理。中继从不发出停止事件是正确的,因此释放来自中继的订阅的唯一方法是处置它们。
要处理此类订阅,您可以手动处理,或您可以将一次性用品放入处理袋中。 DisposeBag 在 deinit
ed 时对其包含的所有一次性用品调用 dispose()
。所以:
final class Example: UIViewController {
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.myRelay
.subscribe(onNext: { /* do stuff */ })
.disposed(by: disposeBag)
}
}
足够了,最佳实践。