【问题标题】:When should we call addDisposableTo(disposeBag) in RxSwift?我们什么时候应该在 RxSwift 中调用 addDisposableTo(disposeBag)?
【发布时间】:2016-10-10 00:51:54
【问题描述】:

我们创建一个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 将终止并释放观察者?

【问题讨论】:

    标签: ios swift functional-programming rx-swift


    【解决方案1】:

    Dispose 包用于将类似 ARC 的行为返回给 RX。当 DisposeBag 被释放时,它会在每个添加的一次性物品上调用 dispose。

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

    所以如果我们有任何可以留下的资源,你应该调用它。

    this article 中的更多信息。

    【讨论】:

      【解决方案2】:

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

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

      见:Unused disposable warning

      【讨论】:

        猜你喜欢
        • 2016-11-11
        • 2011-04-12
        • 1970-01-01
        • 2021-09-07
        • 2020-09-06
        • 2011-07-04
        • 2017-09-13
        • 2021-12-29
        • 2011-07-17
        相关资源
        最近更新 更多