RxSwift(四)探索RxSwift核心逻辑之订阅序列

477 阅读2分钟

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)

  • AnonymousObservable.subscribe(observer),然后去找AnonymousObservablesubscribe,通过继承链找到Producer里面的这个subscribe方法

    image

  • 再看一看这个subscribe方法,可以看到走了self.run,这里要去找子类AnonymousObservablerun方法,因为Producer里的这个run方法是没有实现的

    image

  • 在这里可以看到创建了一个AnonymousObservableSink(匿名观察管道),然后执行的是**sink.run()**方法,可以看到业务下沉了,由sink处理

    image

  • 这次再找到sink.run方法,看到执行的是parent._subscribeHandler(AnyObserver(self)),这里的parent是AnonymousObservable,所以这里可以转换为AnonymousObservable._subscribeHandler(AnyObserver(self)

    image

  • 再看看这个AnyObserver(self),self 指的是AnonymousObservableSink, 点进去可以看到这里创建了一个Anonymous event handler type,保存了AnonymousObservableSink .on( 如果没仔细阅读,通常会误以为保存的是AnonymousObservableSink),这里重点理解记住: 执行observer.on的时候会执行AnonymousObservableSink.on

    image

总结

在上面整个流程探索下来,可能会显得有点乱,但是我们好好梳理一下,其实就发现还是很容易的。 梳理一下Observer的简单继承链

重点梳理一遍订阅序列

  • 创建AnonymousObserver : 保存了一个EventHandler代码块,有一个onCore方法用来执行event闭包

  • 订阅 AnonymousObserver.subscriber:

    image