处置
创建订阅后,管理其正确的释放非常重要。
文档告诉我们
如果序列在有限时间内终止,则不使用
addDisposableTo(disposeBag)调用 dispose 或不会导致任何永久性资源泄漏。但是,在序列完成之前,将使用这些资源,方法是完成元素的生成或返回错误。
有两种方法可以释放资源。
- 使用 disposeBags 和addDisposableTo运算符。
- 使用 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)
    }