现在我需要基于配置API更改应用程序主题(颜色),因此我正在使用RxCocoa,RxSwift框架在每个视图控制器上创建可观察的对象,以在应用程序上应用新主题。
我的问题是使用DisposeBag的最佳实践是什么?
预先感谢
答案 0 :(得分:2)
处置袋的全部目的是处置破坏时所容纳的可观察物。一个全球性的袋子永远不会被破坏,反而破坏了它的目的。这等于完全忽略了一次性用品。
只要您知道可观察对象将在有限的时间内错误/完成,就可以忽略它们,因为无论如何链都是在那时处置的。例如,如果您使用take(x)
,则实际上并不需要一次性物品,因为该链条将在发出规定数量的物品后完成并销毁。
另外,有趣的是,订阅按钮轻按时不需要它,因为轻击Observable将在按钮取消初始化时完成并处理。我怀疑其他UI元素的工作方式相同。
基本上,袋子在那儿是作为故障保护的……(我在回答这个问题时学到了一些东西。谢谢。)
答案 1 :(得分:1)
在ViewController中定义x$new_col
有助于管理相关DisposeBag
的生命周期
这是一个简单的示例,在ViewController中,由Disposable
中的Dispoable
持有针对API请求(用于与UI相关的数据)的订阅。取消分配ViewController后,关联的DisposeBag
将处置其所有DisposeBag
。
那时,如果API请求仍处于待处理状态,则将调用Disposables
以避免不必要的转发(假设可观察对象构造良好)。
使用传统的回调闭包来实现此行为非常复杂。