处置

创建订阅后,管理其正确的释放非常重要。

文档告诉我们

如果序列在有限时间内终止,则不使用 addDisposableTo(disposeBag) 调用 dispose 或不会导致任何永久性资源泄漏。但是,在序列完成之前,将使用这些资源,方法是完成元素的生成或返回错误。

有两种方法可以释放资源。

  1. 使用 disposeBags 和 addDisposableTo 运算符。
  2. 使用 takeUntil 运算符。

在第一种情况下,你手动将订阅传递给 DisposeBag 对象,该对象正确清除所有占用的内存。

let bag = DisposeBag()
Observable.just(1).subscribeNext { 
    print($0)
}.addDisposableTo(bag)

你实际上并不需要在你创建的每个类中创建 DisposeBags,只需看看 RxSwift 社区名为 NSObject + Rx 的项目。使用框架,上面的代码可以重写如下:

Observable.just(1).subscribeNext { 
    print($0)
}.addDisposableTo(rx_disposeBag)

在第二种情况下,如果订阅时间与 self 对象生存期一致,则可以使用 takeUntil(rx_deallocated) 实现处理:

let _ = sequence
    .takeUntil(rx_deallocated)
    .subscribe {
        print($0)
    }