处置
创建订阅后,管理其正确的释放非常重要。
文档告诉我们
如果序列在有限时间内终止,则不使用
addDisposableTo(disposeBag)
调用 dispose 或不会导致任何永久性资源泄漏。但是,在序列完成之前,将使用这些资源,方法是完成元素的生成或返回错误。
有两种方法可以释放资源。
- 使用
disposeBag
s 和addDisposableTo
运算符。 - 使用
takeUntil
运算符。
在第一种情况下,你手动将订阅传递给 DisposeBag
对象,该对象正确清除所有占用的内存。
let bag = DisposeBag()
Observable.just(1).subscribeNext {
print($0)
}.addDisposableTo(bag)
你实际上并不需要在你创建的每个类中创建 DisposeBag
s,只需看看 RxSwift 社区名为 NSObject + Rx 的项目。使用框架,上面的代码可以重写如下:
Observable.just(1).subscribeNext {
print($0)
}.addDisposableTo(rx_disposeBag)
在第二种情况下,如果订阅时间与 self
对象生存期一致,则可以使用 takeUntil(rx_deallocated)
实现处理:
let _ = sequence
.takeUntil(rx_deallocated)
.subscribe {
print($0)
}