我们什么时候应该在 RxSwift 中调用 addDisposableTo(disposeBag)?

When should we call addDisposableTo(disposeBag) in RxSwift?

我们创建了一个DisposeBag和一个Observable,订阅了Observable然后是addDisposableTo(disposeBag),我知道DisposeBag什么时候会deinit ,它会调用dispose()释放资源,否则会导致内存泄漏。

如果Observable发送CompleteError即在有限时间内终止。当 ObservableDisposeBag deinit 之前终止时,我是否需要调用 addDisposableTo(disposeBag)DisposeBag 是否在收到终止消息后自动释放订阅它的观察者?

let disposeBag = DisposeBag()

Observable.just("")
    .subscribe { event in
        print(event)
    }
    .addDisposableTo(disposeBag)

我应该明确地 .addDisposableTo(disposeBag) 吗?我认为在发送“”之后,Observable 将终止并释放观察者?

如果您确定 observable 以 确定性方式完成 - 例如在您的示例中使用 just,或使用 taketakeUntil, 等等 -, 你可以选择不使用 DisposeBag。

您可能会收到编译器警告,它实际上很好地解释了这种行为以及如何解决它。但总的来说,如果您仍然使用 DisposeBag,它会更有前途。

参见:Unused disposable warning

Dispose 包用于 return 对 RX 的类似 ARC 的行为。释放 DisposeBag 时,它将对每个添加的一次性物品调用 dispose。

它用于处理您在闭包中传递的旧引用和不再需要的资源(并且显然未被使用):例如打开的 HTTP 连接、数据库连接或缓存。

所以如果我们有什么资源可以剩余,你应该调用它。

this article 中的更多内容。