RAC初识
来源:互联网 发布:看电视直播的软件 编辑:程序博客网 时间:2024/05/17 07:50
简介
简单的说,RAC就是一个第三方库,他可以大大简化你的代码过程。
官方的说,ReactiveCocoa(其简称为RAC)是由GitHub开源的一个应用于iOS和OS X开发的新框架。RAC具有函数式编程和响应式编程的特性。
RAC在某些特定情况下开发时可以大大简化代码,并且目前来看安全可靠。
RAC常见的类
RACSignal:信号类
//1.创建信号 /* didSubScriber调用:只要一个信号被订阅就调用! didSubScriber作用:利用subscriber 来发送数据! didSubScriber能否执行,取决于信号是否被订阅 */ RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { NSLog(@"Block被执行!"); //3.发送信号 [subscriber sendNext:@"Hello,LIYANJUN!"]; return nil; }]; //2.订阅信号(热信号) /* nextBlock调用:只要订阅者发送数据、信号就会被调用 nextBlock作用:处理数据、展示UI nextBlock是否被调用,取决于订阅者是否发送了信号 */ [signal subscribeNext:^(id x) { //x:信号发送的内容 NSLog(@"%@",x); }];
执行过程
查看源码可以知道其执行过程如下
RACDisposable:它是帮助我们取消订阅!
什么时候取消订阅
- 信号发送完毕;
- 信号发送失败;
1. 默认一个信号发送完毕后,就会主动取消订阅2. 只有订阅者存在,就不会取消订阅 3. 可以手动取消订阅 RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { NSLog(@"Block被执行!"); //3.发送信号 [subscriber sendNext:@"Hello,LYJ!"]; self.subScriber = subscriber;//强引用,防止block执行完毕后释放,执行取消 return [RACDisposable disposableWithBlock:^{ //只有信号取消订阅,就会执行这里 NSLog(@"订阅被取消!"); }]; }]; RACDisposable *disposable = [signal subscribeNext:^(id x) { //x:信号发送的内容 NSLog(@"%@",x); }]; [disposable dispose];
RACSubject:信号提供者:自己可以充当信号,又能发送信号
//1.创建信号 RACSubject *subject = [RACSubject subject]; //2.订阅信号 //不同的信号,订阅方式不一样(因为类型不一样,所以调用方法不一样) //RACSubject 处理订阅:拿到之前的_subScribers数组,保存订阅者 [subject subscribeNext:^(id _Nullable x) { NSLog(@"程序员“不高兴”同学,接收到祝福:%@",x); }]; [subject subscribeNext:^(id _Nullable x) { NSLog(@"程序员“xXuTeng”同学,接收到祝福:%@",x); }]; [subject subscribeNext:^(id _Nullable x) { NSLog(@"程序员“随遇而安”同学,接收到祝福:%@",x); }]; //3.发送数据 //遍历出所有的数据,调用nextBlock [subject sendNext:@"1024 程序员节快乐!身体健康!万事如意~~~~~"];
信息流
RACReplaySubject
他是RACSubject的子类,RACReplaySubject可以先发送信号,再订阅信号;RACSubject就不可以。
//1.创建信号 RACReplaySubject *subject = [RACReplaySubject subject]; //3.发送信号 [subject sendNext:@"Hello"]; //2.订阅信号 [subject subscribeNext:^(id _Nullable x) { NSLog(@"%@",x); }]; //2.订阅信号 [subject subscribeNext:^(id _Nullable x) { NSLog(@"12312314%@",x); }];
他为什么可以提前发送信号,下图可以很好的解释。
在发送信号的时候,她会把数据保存一份,然后订阅信号的时候,她会遍历valuesReceived,只要有发送者,就发送数据
阅读全文
0 0
- rac初识
- RAC初识
- RAC初识--003--RACRACDisposable
- RAC初识--004--RACSubject
- rac初识之冷热信号
- iOS开发 ☞ 初识RAC
- 初识RAC-002--RACSignal类
- 初识RAC:001--Block简单使用
- 初识Oracle RAC:产生的背景及其结构
- RAC
- rac
- rac
- RAC
- RAC
- RAC
- rac
- 初识
- 初识
- CSDN现在绑定手机还送下载积分吗
- 32位和64位及其内存长度
- 对文件夹读取、改名等处理的MATLAB代码
- 再议应用工程师与嵌入式工程师的区别
- 对于想创业,想开发APP的程序员来说,这是一篇价值百万的文章!
- RAC初识
- 广度优先遍历 C#
- Nosql学习之路(一)
- JVM GC调优一则--增大Eden Space提高性能
- 设计一个鼠标点击速度比赛游戏。 *(1)显示一个按钮和文本框。 *(2)文本框显示鼠标点击次数
- 《穿越计算机的迷雾》第二版说明
- Overriding equals() of Object (Java)
- Oracle 存储过程内创建存储过程、函数
- 实现顺序表多种操作(removeall、冒泡排序等)