ReactiveCocoa 源码分析(二)
上篇简单的讲了一下最基础的RACSignal信号流程,这次要介绍的是RACSignal的子类RACSubject.先看一下RACSubject的简单使用方法
RACSubject的使用从这就可以看出来,RACSubject的使用方法是分三步走,信号的创建,信号的订阅,发送消息.与父类RACSignal相比少了取消信号的声明.先看看信号创建的内部实现吧
RACSubject的内部实现根据RACSubject的内部实现,在初始化创建RACSubject类对象同时,创建了RACCompundDisposable类对象和一个subscribers数组.并在dealloc中执行组合销毁栈的销毁.没有同父类一样保存一个信号销毁对象,而是通过组合销毁栈销毁.
那么RACSubject与父类RACSignal的订阅,发送消息也有所不同.
在上篇文章中RACSignal类的subscibe方法中,执行了signal保存的didsubscribe()代码块.也就是通过创建信号时保存的成员变量didsubscribe销毁信号.而RACSubject是通过组合销毁栈销毁,看看RACSubject和父类RACSignal的subscribe方法
RACSignal的Subscribe方法 RACSubject的Subscribe方法看看消息的发送方法
消息的发送从方法中可以看出RACSubject遍历所有的订阅者调用sendNext方法,执行与父类相应的nextBlock()
最后看看RACSubject的执行流程
1. RACSubject创建信号,创建组合式销毁栈,可变的订阅者数组
2.RACSubject订阅信号并保存NextBlock()
3.创建实际的订阅者RACPassthroughSubscriber
4.sendNext发送信号
5.遍历所有订阅者并执行保存的代码块nextBlock()
网友评论