RxSwift:使用DisposeBag的最佳实践是什么?

时间:2018-08-05 13:32:53

标签: swift rx-swift rx-cocoa

现在我需要基于配置API更改应用程序主题(颜色),因此我正在使用RxCocoa,RxSwift框架在每个视图控制器上创建可观察的对象,以在应用程序上应用新主题。

我的问题是使用DisposeBag的最佳实践是什么?

  • 在每个视图控制器上创建新的DisposeBag对象?
  • 还是对所有可观察物使用一个全局DisposeBag?

预先感谢

2 个答案:

答案 0 :(得分:2)

处置袋的全部目的是处置破坏时所容纳的可观察物。一个全球性的袋子永远不会被破坏,反而破坏了它的目的。这等于完全忽略了一次性用品。

只要您知道可观察对象将在有限的时间内错误/完成,就可以忽略它们,因为无论如何链都是在那时处置的。例如,如果您使用take(x),则实际上并不需要一次性物品,因为该链条将在发出规定数量的物品后完成并销毁。

另外,有趣的是,订阅按钮轻按时不需要它,因为轻击Observable将在按钮取消初始化时完成并处理。我怀疑其他UI元素的工作方式相同。

基本上,袋子在那儿是作为故障保护的……(我在回答这个问题时学到了一些东西。谢谢。)

答案 1 :(得分:1)

在ViewController中定义x$new_col有助于管理相关DisposeBag的生命周期

这是一个简单的示例,在ViewController中,由Disposable中的Dispoable持有针对API请求(用于与UI相关的数据)的订阅。取消分配ViewController后,关联的DisposeBag将处置其所有DisposeBag

那时,如果API请求仍处于待处理状态,则将调用Disposables以避免不必要的转发(假设可观察对象构造良好)。

使用传统的回调闭包来实现此行为非常复杂。