2020-10-15

作者: 王纯杰cj | 来源:发表于2020-10-15 15:26 被阅读0次

     ReactiveCocoa 源码分析(二)    

       上篇简单的讲了一下最基础的RACSignal信号流程,这次要介绍的是RACSignal的子类RACSubject.先看一下RACSubject的简单使用方法

    RACSubject的使用

        从这就可以看出来,RACSubject的使用方法是分三步走,信号的创建,信号的订阅,发送消息.与父类RACSignal相比少了取消信号的声明.先看看信号创建的内部实现吧

    RACSubject的内部实现

    根据RACSubject的内部实现,在初始化创建RACSubject类对象同时,创建了RACCompundDisposable类对象和一个subscribers数组.并在dealloc中执行组合销毁栈的销毁.没有同父类一样保存一个信号销毁对象,而是通过组合销毁栈销毁.

    那么RACSubject与父类RACSignal的订阅,发送消息也有所不同.

    在上篇文章中RACSignal类的subscibe方法中,执行了signal保存的didsubscribe()代码块.也就是通过创建信号时保存的成员变量didsubscribe销毁信号.而RACSubject是通过组合销毁栈销毁,看看RACSubject和父类RACSignalsubscribe方法

    RACSignal的Subscribe方法 RACSubject的Subscribe方法

    看看消息的发送方法

    消息的发送

    从方法中可以看出RACSubject遍历所有的订阅者调用sendNext方法,执行与父类相应的nextBlock()

    最后看看RACSubject的执行流程

    1. RACSubject创建信号,创建组合式销毁栈,可变的订阅者数组

    2.RACSubject订阅信号并保存NextBlock()

    3.创建实际的订阅者RACPassthroughSubscriber

    4.sendNext发送信号

    5.遍历所有订阅者并执行保存的代码块nextBlock()

    相关文章

      网友评论

        本文标题:2020-10-15

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