概述
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 和RACSubject1. 什么是RAC?2.RACSignal小试3. RACSignal 的内部实现解读4.RACSubject的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复