代码之家  ›  专栏  ›  技术社区  ›  Moayad Al kouz

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

  •  1
  • Moayad Al kouz  · 技术社区  · 8 年前

    现在我需要根据配置API更改app主题(颜色),所以我使用rxcococa、RxSwift框架在每个视图控制器上创建observate,以便在应用程序上应用新主题。

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

    • 在每个视图控制器上创建新的DisposeBag对象?
    • 或者对所有可观察到的数据使用一个全局DisposeBag?

    提前谢谢

    2 回复  |  直到 8 年前
        1
  •  2
  •   duan    7 年前

    定义 DisposeBag 在视图中,控制器将帮助管理相关的 Disposable

    下面是一个简单的示例,在ViewController中,对API请求(与UI相关的数据)的订阅由 Dispoable 在里面 弃置 . 当ViewController解除定位时,关联 弃置 会把它全部处理掉 Disposables .

    当时,如果API请求仍然处于挂起状态, URLSessionTask.cancel 将被调用以避免不必要的转发(假设可观测数据构造良好)。

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

        2
  •  5
  •   Daniel T.    8 年前

    处理包的全部目的是处理它在销毁时所包含的可观察到的东西。一个全球性的袋子永远不会被摧毁,这反而会挫败它的目的。这等于完全忽视一次性用品。

    忽略它们是可以做到的,只要你知道可观察到的将在有限的时间内出错/完成,因为链在那个时间被释放。例如,如果使用 take(x) 那么你实际上不需要一次性的,因为链子会在被禁止数量的物品发出后完成并被处理掉。

    另外,有趣的是,订阅按钮点击时不需要它,因为当按钮被取消硝化时,可观察到的点击将完成并处理。我怀疑其他UI元素的工作方式相同。

    基本上,包是作为一个故障保险。。。(我在回答这个问题时学到了一些东西。谢谢。)

    推荐文章