RxSwift(三)探索RxSwift核心逻辑之创建序列
RxSwift(四)探索RxSwift核心逻辑之订阅序列
RxSwift(五)探索RxSwift核心逻辑之发送信号及总结
前言
继续开始RxSwift核心逻辑第二步的订阅序列探索之路。
探索过程
-
再点击进入subscribe时,可以看到有两个路径,这里当然是选择ObservableType下的subscribe了,因为选第一个并没有找到方法内容
image
-
在这个subscribe方法里,看到核心代码,创建了一个AnonymousObserver(匿名观察者)对象,和之前创建序列时的AnonymousObservable(匿名可观察序列)必然有联系
image
-
同样的进入到AnonymousObserver,看到它做了如下的事,习惯性的标注一下,再进去看看它继承的ObserverBase干了些什么
image
-
可以看到ObserverBase遵循了Disposable(dispose方法的声明)和ObserverType(上篇文章看过,重点是subscribe)两个协议,里面重点有一个on方法,监听着event的next、error、completed, 同时还dispose()销毁方法和onCore()核心方法
image
-
感觉好像进入了死胡同,这时又回到subscribe方法里来,在上篇文章有了解asObservable()是一个实现万物皆序列(保持协议的一致性)的方法,所以
self.asObservable().subscribe(observer)
,其实走的就是AnonymousObservable.subscribe(observer)
-
imageAnonymousObservable.subscribe(observer)
,然后去找AnonymousObservable的subscribe,通过继承链找到Producer里面的这个subscribe方法
-
再看一看这个subscribe方法,可以看到走了
imageself.run
,这里要去找子类AnonymousObservable的run方法,因为Producer里的这个run方法是没有实现的
-
在这里可以看到创建了一个AnonymousObservableSink(匿名观察管道),然后执行的是sink.run()方法,可以看到业务下沉了,由sink处理
image
-
这次再找到sink.run方法,看到执行的是parent._subscribeHandler(AnyObserver(self)),这里的parent是AnonymousObservable,所以这里可以转换为
imageAnonymousObservable._subscribeHandler(AnyObserver(self)
-
再看看这个
imageAnyObserver(self)
,self 指的是AnonymousObservableSink, 点进去可以看到这里创建了一个Anonymous event handler type,保存了AnonymousObservableSink .on
( 如果没仔细阅读,通常会误以为保存的是AnonymousObservableSink
),这里重点理解记住:
执行observer.on的时候会执行AnonymousObservableSink.on
总结
在上面整个流程探索下来,可能会显得有点乱,但是我们好好梳理一下,其实就发现还是很容易的。
梳理一下Observer的简单继承链
重点梳理一遍订阅序列
-
创建AnonymousObserver : 保存了一个EventHandler代码块,有一个onCore方法用来执行event闭包
-
订阅 AnonymousObserver.subscriber:
image
网友评论