RX 继电器从未被处理过吗?

Are rx relays never disposed?

阅读 Rx relays 它说他们从不完成或发出错误:https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Subjects.md

  1. 这是否意味着除非您手动销毁它们,否则它们永远不会销毁,就像这样:
let disposable: Disposable?

override func viewDidLoad() {
    super.viewDidLoad()

    disposable = viewModel.myRelay.subscribe(onNext: { //do stuff })
}

override func viewWillDisappear() {
    super.viewWillDisappear()

    disposable.dispose()
}

  1. 所以挂钩 .dispose(by: disposeBag) 是没有意义的,对吧?

  2. 除非手动disposed,否则中继不会造成内存泄漏吗?

订阅将在其源发出停止事件(完成或错误)或调用其一次性 dispose() 时进行处理。中继从不发出停止事件是正确的,因此释放来自中继的订阅的唯一方法是处置它们。

要处理此类订阅,您可以手动处理,您可以将一次性用品放入处理袋中。 DisposeBag 在 deinited 时对其包含的所有一次性用品调用 dispose()。所以:

final class Example: UIViewController { 
    let disposeBag = DisposeBag()
    override func viewDidLoad() { 
        super.viewDidLoad()
        viewModel.myRelay
            .subscribe(onNext: { /* do stuff */ })
            .disposed(by: disposeBag)
    }
}

足够了,最佳实践。