我们创建了一个DisposeBag
和一个Observable
,订阅了Observable
然后addDisposableTo(disposeBag)
,我知道DisposeBag
什么时候会去掉它,它将调用dispose()
释放资源,否则会导致内存泄漏。
如果Observable
发送Complete
或Error
在有限时间内终止。如果Observable
在DisposeBag
之前终止,我是否需要致电addDisposableTo(disposeBag)
? DisposeBag
在收到终止消息时会自动释放订阅它的观察者吗?
let disposeBag = DisposeBag()
Observable.just("")
.subscribe { event in
print(event)
}
.addDisposableTo(disposeBag)
我应该.addDisposableTo(disposeBag)
明确吗?我想发送""后,Observable
将终止并释放观察者?
答案 0 :(得分:8)
如果您确定observable以确定性方式完成 - 例如在您的示例中使用just
,或使用take
,takeUntil
等。 - ,您可以选择不使用DisposeBag。
您可能会收到编译器警告,这实际上很好地解释了这种行为以及如何解决它。但总的来说,无论如何你都会使用DisposeBag,这是更具前瞻性的。
答案 1 :(得分:0)
Dispose bags用于将ARC行为返回到RX。当DisposeBag被取消分配时,它将在每个添加的一次性用品上调用dispose。
它用于处理在闭包中传递的旧引用和不再需要的资源(显然不使用它们):例如,打开HTTP连接,数据库连接或缓存。
因此,如果我们有任何可以留下的资源,你应该调用它。