上图是RACSubject和RACReplaySubejct订阅信号的方法,RACReplaySubject是继承自RACSubject,所以RACReplaySubject既可以当做信号又可发送信号
,但与RACSubject不同的是,RACSubject必须先订阅信号后发送信号,但RACReplaySubject既可以先订阅信号后发送信号,又可以先发送信号后订阅信号
,即
1. 创建信号-订阅信号-发送信号
2. 创建信号-发送信号-订阅信号
RACReplaySubject用此两种方式都可以订阅到发出的信号。
源码分析
1.创建信号
RACReplaySubject 调用父类方法subject创建([[self alloc] init]),RACReplaySubject里重写了init方法,做的操作有 【如下图】
1.capacity赋值
2.初始化valuesReceived
2.发送信号
RACReplaySubject 发送信号时主要做了两件事 【如下图】
1.把要发送的消息添加到valuesReceived数组中
2.遍历所有订阅者,把消息发送出去。