// 建立序列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