// 建立序列let ob = Observable<Any>.create { (observer) -> Disposable in
observer.onNext("12345")
return Disposables.create { print("銷燬釋放了")} // dispose.dispose()
}
// 序列訂閱
let dispose = ob.subscribe(onNext: { (anything) in
print("訂閱到了:\(anything)")
}, onError: { (error) in
print("訂閱到了:\(error)")
}, onCompleted: {
print("完成了")
}) {
print("銷燬回調")
}
// 銷燬關係
// status - 算法 - dispose 隨時隨地都能銷燬
// 對象 是沒法銷燬的
print("執行完畢")
dispose.dispose()
複製代碼
以上代碼執行結果:算法
error
Orcompleted
當ob
調用subscribe
的時候會建立一個觀察者observer
,這個時候處理error
和completed
事件的時候就會調用dispose()
:可是上邊的示例,並無發送error
和completed
事件,那麼這個dispose()
又是在哪裏調用的呢? 請看咱們在調用subscribe
是否是用dispose
接收了,而且在下邊調用了這個dispose.dispose()
,但是這個dispose
爲何就能夠呢,請看下面👇:bash
dispose.dispose()
ob
在subscribe
的時候還作了一件事:BinaryDisposable
對外提供
dispose()
那麼這裏的兩個銷燬者分別是呢: 第一個是:
self.asObservable().subscribe(observer)
第二個是:
subscribe
時建立的
disposable
第二個來源很清楚了,直接看第一個,會來到
Producer
這個銷燬者是
SinkDisposer
->
Cancelable
->
Disposable
,調用
run
把這個
disposer
傳進去了,進行記錄,在合適的地方使用,調用
dispose()
,返回一個元組:
而後調用
setSinkAndSubscription
保存元組的兩個值:
然而這裏的disposer:SinkDisposer
返回去被咱們調用subscribe
的時候接收了:dispose
ui
dispose
直接調用
dispose()
,不就會進入
SinkDisposer
的
dispose()
進行銷燬麼
最後附上整個銷燬流程圖:spa