-
RACSubject :信号提供者,自己可以充当信号,又能发送信号。
使用场景:通常用来代替代理,实现传值
-
RACReplySubject :重复提供信号类,RACSubject的子类
RACReplaySubject 与RACSUbject区别: - RACReplaySubject 可以先发送信号,再订阅信号 ,RACSubject不可以 - 使用场景 : - 如果一个信号没被订阅一次,就需要把之前的值重新发送一遍,使用重复提供信号类 - 可以设置capacity数量来限制缓存的value的数量,即只缓充最新的几个值
```
// RACSubject 使用
// 创建信号
[RACSubject subject] 跟RACSignal不一样 创建信号时没有bloc
// 订阅信号
- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
// 发送信号
sendNext:(id)value
RACSubject: 底层实现的RACSignal不一样
- 调用subsrcibeNexrt订阅信号 只是把订阅者保存起来 并且订阅者的nextBlock已经赋值了
- 调用sendNext发送信号 , 遍历刚刚保存的多有订阅者,一个一个调用订阅者的nexrBolck
```
```
1. 创建信号
RACSubject * subject = [RACSubject subject];
[subject subscribeNext:^(id _Nullable x) {
//block 调用时刻: 当信号发出新值 就会调动
NSLog(@"第一个订阅者 调用");
}];
[subject subscribeNext:^(id _Nullable x) {
//多次订阅 也会调用
NSLog(@"第二个订阅者 调用");
}];
[subject sendNext:@1];
```
/**
RACReplaySubject 使用步骤:
- 创建信号 [RACSubject subject] , 跟RACSignal 不一样 创建的时候没有block
- 可以先订阅信号 也可以先发送信号
- 订阅信号 - (RACDisposable *) subcribeNext:()
*/
/**
RACReplysubject底层实现和RACSubject不一样
- 调用sendNext发送信号,把值保存起来,然后便利刚刚所有保存起来的所有订阅者,一个一个调用订阅者的nextBlock
- 调用subscribeNext订阅信号,遍历保存的所有值,一个一个调用订阅者的nextBlock
如果当一个信号被订阅,就重复播放之前所有值,需要先发送信号,在订阅信号;也就是先保存值,在订阅信号
*/
RACReplaySubject * repleySubject =[RACReplaySubject subject];
[repleySubject sendNext:@1];
[repleySubject sendNext:@2];
[repleySubject subscribeNext:^(id _Nullable x) {
NSLog(@"第一个订阅者接收到的数据%@",x);
}];
[repleySubject subscribeNext:^(id _Nullable x) {
NSLog(@"第二个订阅者接收到的数据%@",x);
}];