美文网首页
RxSwift(四)探索RxSwift核心逻辑之订阅序列

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

作者: 伤心的EasyMan | 来源:发表于2019-07-31 01:25 被阅读0次

    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

    相关文章

      网友评论

          本文标题:RxSwift(四)探索RxSwift核心逻辑之订阅序列

          本文链接:https://www.haomeiwen.com/subject/mbsarctx.html