我们什么时候应该在RxSwift中调用addDisposableTo(disposeBag)?

时间:2016-06-09 11:31:25

标签: ios swift functional-programming rx-swift

我们创建了一个DisposeBag和一个Observable,订阅了Observable然后addDisposableTo(disposeBag),我知道DisposeBag什么时候会去掉它,它将调用dispose()释放资源,否则会导致内存泄漏。

如果Observable发送CompleteError在有限时间内终止。如果ObservableDisposeBag之前终止,我是否需要致电addDisposableTo(disposeBag)DisposeBag在收到终止消息时会自动释放订阅它的观察者吗?

let disposeBag = DisposeBag()

Observable.just("")
    .subscribe { event in
        print(event)
    }
    .addDisposableTo(disposeBag)

我应该.addDisposableTo(disposeBag)明确吗?我想发送""后,Observable将终止并释放观察者?

2 个答案:

答案 0 :(得分:8)

如果您确定observable以确定性方式完成 - 例如在您的示例中使用just,或使用taketakeUntil等。 - ,您可以选择不使用DisposeBag。

您可能会收到编译器警告,这实际上很好地解释了这种行为以及如何解决它。但总的来说,无论如何你都会使用DisposeBag,这是更具前瞻性的。

请参阅:Unused disposable warning

答案 1 :(得分:0)

Dispose bags用于将ARC行为返回到RX。当DisposeBag被取消分配时,它将在每个添加的一次性用品上调用dispose。

它用于处理在闭包中传递的旧引用和不再需要的资源(显然不使用它们):例如,打开HTTP连接,数据库连接或缓存。

因此,如果我们有任何可以留下的资源,你应该调用它。

更多jsfiddle.net/hhh2zx3w