示例
// 创建序列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()
以上代码执行结果:

Dispose调用逻辑分析
errorOrcompleted当ob调用subscribe的时候会创建一个观察者observer,这个时候处理error和completed事件的时候就会调用dispose():

但是上边的示例,并没有发送error和completed事件,那么这个dispose()又是在哪里调用的呢?
请看我们在调用subscribe是不是用dispose接收了,并且在下边调用了这个dispose.dispose(),可是这个dispose为什么就可以呢,请看下面👇:
dispose.dispose()ob在subscribe的时候还做了一件事:


BinaryDisposable对外提供dispose()

self.asObservable().subscribe(observer)
第二个是:subscribe时创建的disposable
第二个来源很清楚了,直接看第一个,会来到Producer

SinkDisposer-> Cancelable->Disposable,调用run把这个disposer传进去了,进行记录,在合适的地方使用,调用dispose(),返回一个元组:

setSinkAndSubscription保存元组的两个值:

然而这里的disposer:SinkDisposer返回去被我们调用subscribe的时候接收了:dispose

dispose直接调用dispose(),不就会进入SinkDisposer的dispose()进行销毁么

最后附上整个销毁流程图:
