處置
建立訂閱後,管理其正確的釋放非常重要。
文件告訴我們
如果序列在有限時間內終止,則不使用
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)
}