}];
}];
#pragma mark - 多次订阅怎么办
[signal subscribeNext:^(id _Nullable x) {
//接收数据刷新页面
}];
[signal subscribeNext:^(id _Nullable x) {
//接收数据刷新页面
}];
```
* 解决以上方案的办法,订阅多次进行多次网络请求
```
// RACMulticastConnection :(RACSignal) 用于一个信号的订阅,被订阅多次,为了防止多次调用创建信号中的block,造成负面影响可以使用这个类做处理
@weakify(self);
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
NSLog(@"网络数据发送请求");
@strongify(self);
//网络数据请求,完毕了传递过去,loadData就是一个简单的网络请求函数
[self loadData:^(id data) {
[subscriber sendNext:data];
}];
return [RACDisposable disposableWithBlock:^{
}];
}];
//把信号转为 RACMulticastConnection 形式了
RACMulticastConnection *cnt = [signal publish];
//下来订阅的方法
[cnt.signal subscribeNext:^(id _Nullable x) {
}];
[cnt.signal subscribeNext:^(id _Nullable x) {
}];
[cnt connect];
```
* RACMulticastConnection 的原理:RACSignal 创建信号的时候用 RACDynamicSignal 保存了block ;这个类其实和RACSubject类的使用差不多是一样的。面向对象 c语言
* 理解和思想说明:我觉得学到这里,个人感觉RAC的这三个类的作用的本质就是保存block,在适当的地方执行block,RACSubject 、 RACSignal 、RACMulticastConnection 三个类互相和做完成数据流的互换,看你想用那种形式的数据流的选择,然后在其中选择两个类互相使用就可以完美解决问题,这是我这段时间学习RAC这三个类的见解,有什么不对的地方还望大家伙见谅和提出。
=================RACCommand==============
* 关于 RACCommand 的讲解 : RAC用于处理事件的类
```
RACCommand *command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
//command 的block
NSLog(@"%@",input);
NSLog(@"====1");
return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
//RACSignal 的 block
NSLog(@"====2");
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-77250-5.html
你牛
你脸红了吗