RxSwift DisposeBag在ViewController中的用法

时间:2019-03-06 16:37:07

标签: ios mvvm uiviewcontroller rx-swift

我是RxSwift框架的新手。我在ViewController中使用了一次性用品,并且在DisposeBag中添加了一次性用品。

我应该在哪里分配DisposeBag以便处置所有一次性用品?在控制器的viewDidAppeardeinit中?哪种方法更安全?

3 个答案:

答案 0 :(得分:2)

如果您将处理包声明为视图控制器子类的实例变量,则将在视图控制器被释放后立即自动将其释放。也就是说,如果它也没有被其他东西保留。

答案 1 :(得分:0)

如果您在viewWillAppear函数中预订了可观察对象,则应在viewDidDisappear函数中取消初始化disposeBag。如果您在viewDidLoad中订阅了可观察物,那么不用担心,处置袋将自动进行处置。后一种方法是标准的。

答案 2 :(得分:0)

一次性用品的目的是什么

此处的Disposable表示可观察对象的订阅的句柄。处置后,它将取消可观察对象的操作。最直接的例子是网络请求。与该请求相关的一次性用品被处置后,如果请求未完成,则会被取消。

DisposeBag

处理袋收集多个生命周期应相关的一次性物品。当袋子被处理掉时,其中的所有可降解物也将被处理掉。

在View Controller中将袋子放置在哪里有意义

现在我们知道一次性用品的实际用途了,我们需要回答的问题不再是“我应该在哪里处置行李”,而是“何时取消我的订阅”?

在这里,答案确实与用例有关:有时,如果视图控制器不再在屏幕上,您可能希望停止任何工作。在这种情况下,释放viewDidDisappear:中的处理袋是一个不错的选择。在其他时候,最好将处置包放到deinit中(类生命周期将解决这个问题,尽管您无需覆盖deinit),在这种情况下,您宁愿观察到的继续执行其操作,即使屏幕上没有视图控制器也可以正常工作。

总而言之,没有一种方法比另一种方法更安全,它仅取决于您的用例。

相关问题