處置

建立訂閱後,管理其正確的釋放非常重要。

文件告訴我們

如果序列在有限時間內終止,則不使用 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)
    }