1. 什么是RAC?
RAC是一个开源的框架,其学名为函数响应式编程。
2.RACSignal小试
RACSignal是一个信号类,它的主要作用是:
- 创建一个信号;
- 通过订阅者,订阅这个信号;
- 发送信号;
来实现事件的响应。
RACDisposable这个类:可以帮忙取消信号。
利用RACSignal简单实现一下代码:
- (void)viewDidLoad {
[super viewDidLoad];
//RACSignal: 信号类,当我们有数据产生,创建一个信号!
//1.创建信号(冷信号!)
//didSubscribe调用:只要一个信号被订阅就会调用!!
//didSubscribe作用:利用subscriber发送数据!!
RACSignal * signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//3.发送数据subscriber它来发送
[subscriber sendNext:@"呵呵哈哈嘿嘿"];
return nil;
}];
//2.订阅信号(热信号!!)
//nextBlock调用:只要订阅者发送数据就会调用!
//nextBlock作用:处理数据,展示UI界面!
[signal subscribeNext:^(id x) {
//x:信号发送的内容!!
NSLog(@"%@",x);
}];
}
当运行代码时,就会打印“呵呵哈哈嘿嘿”。
3. RACSignal 的内部实现解读
-
首先,创建信号:当我们通过
createSignal这个方法创建一个信号时,需要传一个block,进入createSignal,查看方法如下:

从源码中,可以知道,RACSignal的create方法其实是调用RACDynamicSignal这个类的createSignal:方法,并把block赋值给这个RACDynamicSignal这个类的create方法:

RACDynamicSignal这个类创建了一个RACDynamicSignal类型的对象,同时保存了block,并返回。等于说,当我们调用RACSignal的createSignal这个方法创建一个信号时,返回的是RACDynamicSignal的对象。 -
其次,订阅信号:当我们调用
RACSignal的createSignal创建完对象signal后,用这个signal调用subscribeNext:这个方法订阅信号。只要一订阅信号,就一定会走第一步的block。

这个方法,其实是根据subscribeNext:这个方法传进来的block,生成一个RACSubscriber类型的对象。再用self调用subscribe的方法。
从上个方法可以,这个self真正的调用者是RACDynamicSignal的这个对象。因此查看订阅的方法subscribe:如下:

上个图片中,有个self.didSubscribe, 这个也就是第一步创建信号时传进来的block。
等于说,当执行到
[signal subscribeNext:^(id _Nullable x) {
NSLog(@“接收到了数据:%@”,x);
}];
这段代码时,就会调用第一步创建信号的block,并把创建RACSubscriber类型的对象返回到block中,即:

- 最后,发送信号:当调用
sendNext:方法时,会调用RACSubcriber类的方法实现:

从上图中,可以看出执行第二步中的nextBlock。
综上所述,可整理成一个流程图如下:

4.RACSubject的使用
RACSubject就是一个既可以创建信号也可以发送信号的类,具体实现就不细说了,主要说说其简单使用:
-
声明一个RACSubject的属性

-
在需要发送信号的地方实现创建和发送的代码:

-
在需要接收信号的地方实现代码:

这样就可以了。确实方便很多,用起来吧,爽歪歪~
最后
以上就是复杂电话最近收集整理的关于01-RAC之RACSignal 和RACSubject1. 什么是RAC?2.RACSignal小试3. RACSignal 的内部实现解读4.RACSubject的使用的全部内容,更多相关01-RAC之RACSignal内容请搜索靠谱客的其他文章。
发表评论 取消回复