我是RxSwift
框架的新手。我在ViewController
中使用了一次性用品,并且在DisposeBag
中添加了一次性用品。
我应该在哪里分配DisposeBag
以便处置所有一次性用品?在控制器的viewDidAppear
或deinit
中?哪种方法更安全?
答案 0 :(得分:2)
如果您将处理包声明为视图控制器子类的实例变量,则将在视图控制器被释放后立即自动将其释放。也就是说,如果它也没有被其他东西保留。
答案 1 :(得分:0)
如果您在viewWillAppear
函数中预订了可观察对象,则应在viewDidDisappear
函数中取消初始化disposeBag。如果您在viewDidLoad
中订阅了可观察物,那么不用担心,处置袋将自动进行处置。后一种方法是标准的。
答案 2 :(得分:0)
此处的Disposable表示可观察对象的订阅的句柄。处置后,它将取消可观察对象的操作。最直接的例子是网络请求。与该请求相关的一次性用品被处置后,如果请求未完成,则会被取消。
处理袋收集多个生命周期应相关的一次性物品。当袋子被处理掉时,其中的所有可降解物也将被处理掉。
现在我们知道一次性用品的实际用途了,我们需要回答的问题不再是“我应该在哪里处置行李”,而是“何时取消我的订阅”?
在这里,答案确实与用例有关:有时,如果视图控制器不再在屏幕上,您可能希望停止任何工作。在这种情况下,释放viewDidDisappear:
中的处理袋是一个不错的选择。在其他时候,最好将处置包放到deinit
中(类生命周期将解决这个问题,尽管您无需覆盖deinit),在这种情况下,您宁愿观察到的继续执行其操作,即使屏幕上没有视图控制器也可以正常工作。
总而言之,没有一种方法比另一种方法更安全,它仅取决于您的用例。