ReactiveCocoa总结
RAC三部曲,1创建信号,2订阅信号,3发送信号,
信号类: RACSiganl
// 1.创建信号
RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//3.发送信号
[subscriber sendNext:@"小四"];
//return [RACDisposable disposableWithBlock:^{ }];取消信号订阅信号不会被触发
return nil;
}];
// 2.订阅信号.
[siganl subscribeNext:^(id x) {
// 当有信号发出数据,就会调用block.
NSLog(@"接收到数据:%@",x);
}];
1. 创建信号,racsignal保存didSubscribe这个block 2.订阅信号,订阅信号代码首先创建一个订阅信号者,保存nextBlock,并在nextBlock里面执行didSubscribe这个Block 3.发送信号 didSubscribe拿到订阅者,调用SendNext发送信号,接着调用刚刚保存的nextBlock执行里面的代码 。
所以,如果没有订阅信号者,那么racsignal保存的didSubscribe这个Block永远不会调用,也就是说发送信号代码永远不会被执行
RACDisposable 可以主动取消信号
//-----------------------------------------------------------------
RACSubject:信号提供者,自己可以充当信号,又能发送信号
RACSubject *subject = [RACSubject subject];
// 2.订阅信号
[subject subscribeNext:^(id x) {
NSLog(@"1订阅者%@",x);
}];
[subject subscribeNext:^(id x) {
NSLog(@"2订阅者%@",x);
}];
// 3.发送信号
[subject sendNext:@"小四"];
1创建信号,创建一个subscribers数组 2订阅信号 保存nextBlock,将订阅者添加到subscribers数组中 3发送信号 遍历数组,取出订阅者,执行 nextBlock
//-----------------------------------------------------------------
RACReplaySubject:重复提供信号类,RACSubject的子类
// 1.创建信号
RACReplaySubject *replaySubject = [RACReplaySubject subject];
// 3.发送信号
[replaySubject sendNext:@1];
[replaySubject sendNext:@2];
// 2.订阅信号
[replaySubject subscribeNext:^(id x) {
NSLog(@"第一个订阅者接收到的数据%@",x);
}];
// 订阅信号
[replaySubject subscribeNext:^(id x) {
NSLog(@"第二个订阅者接收到的数据%@",x);
}];
1 创建信号 分别创建一个subscribers数组和valuesReceived数组 2 订阅信号 保存 nextBlock,遍历valuesReceived数组拿到刚刚创建的RACSuscriber发送数据,如果没有则不发送 4 发送信号 保存发送的数据,遍历所有的订阅者,执行nextBlock。
所以 可以先发送信号,再订阅信号,RACSubject就不可以。
RACMulticastConnection
连接信号类 不管有多少个订阅者,只想要发送一次请求
// 1.创建连接类
RACMulticastConnection *connection = [signal publish];
// 2.订阅信号
[connection.signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
[connection.signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
[connection.signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
// 3.连接:才会把源信号变成热信号
[connection connect];
1创建源信号,保存didSubscribe这个block 2.创建连接类,保存信号,还保存着最开始的signal
3订阅信连接类信号创建RACSubject,保存nextBlock,将订阅者添加到subscribers数组中。4 订阅源信号,执行didSubscribe,遍历RACSubject里面所有的订阅者,取出订阅者,执行 nextBlock
ReactiveCocoa总结的更多相关文章
- iOS开发之ReactiveCocoa下的MVVM(干货分享)
最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...
- ReactiveCocoa 冷热订阅(cold subscribe, hot subscribe)
ReactiveCocoa支持两种订阅方式,一种是冷订阅,一种是热订阅. 热订阅的特点: 1.不管有没有消息订阅着,发送者总会把消息发出去. 2.不管订阅者是什么时候订阅的,发送者总是会把相同的消息发 ...
- 为什么ReactiveCocoa中推荐使用RACSignal来做信号处理而不是RACSubject
原文解释在这里http://cocoadocs.org/docsets/ReactiveCocoa/0.6.0/ 在标题Creating hot subscribables 底下 先贴原文: The ...
- 最快让你上手ReactiveCocoa之基础篇
前言 很多blog都说ReactiveCocoa好用,然后各种秀自己如何灵活运用ReactiveCocoa,但是感觉真正缺少的是一篇如何学习ReactiveCocoa的文章,这里介绍一下. 1.Rea ...
- [iOS]ReactiveCocoa安装方法
1. 替换Ruby镜像 我们想要使用CocoaPods来安装ReactiveCocoa.由于OS X上的Ruby镜像被墙了,感谢淘宝为我们提供了国内访问镜像. $ gem sources --remo ...
- ReactiveCocoa源码拆分解析(七)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 在这篇博客中,我将把ReactiveCocoa中的擦 ...
- ReactiveCocoa源码拆分解析(六)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) RAC为了实现优雅的信号绑定,可谓使尽浑身解数,不仅 ...
- ReactiveCocoa源码拆分解析(五)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 好多天没写东西了,今天继续.主要讲解RAC如何于UI ...
- ReactiveCocoa源码拆分解析(四)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 上一章节简要的说明了如何实现的热信号.但是像那么写, ...
- ReactiveCocoa源码拆分解析(三)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 这一章节主要讨论信号的“冷”与“热” 在RAC的世界 ...
随机推荐
- VC6.0 通过崩溃地址中找到异常代码行
来源:http://blog.csdn.net/mydeardingxiaoli/article/details/20371585 这是从“VC编程经验总结7”中转出来的借花献佛——如何通过崩溃地址找 ...
- Java swing 如何将一个按钮放置到弹出框框的任意位置?(Absolute layout 布局的使用)
准备: Absolute layout 绝对布局,绝对布局中控件的可以在任意位置放置 如何制作下面那种样子的 弹出框? ---------------------------------------- ...
- linux 文件和目录操作
1 相对路径和绝对路径 (与C++中概念相似) cd /root/cat 绝对路径 cd ../文件名/ 相对路径,指相对某个文件而言的 2 切换目录 cd 当前目录 进入某个目录 pwd 显示当前 ...
- windows和Ubuntu双系统的安装和基本操作
因为最近刚开始学习ubuntu系统,首先要安装系统,搜集了网上的资料觉得这篇博客特别有用 http://www.cnblogs.com/Duane/p/5424218.html,我也是按照里面的步骤 ...
- CSS兼容的一些问题
DIV+CSS网页布局这是一种趋势,我也开始顺应这股趋势了,不过在使用DIV+CSS网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV+CSS设计的网页,就应该更注意IE6 ...
- 判断浏览器是否支持html5和css3属性
本文章内容是由一个前辈写的. CSS3特有的属性moz-Transform //判断是否具有相应属性 testProps: function (props) { var i; for (i in pr ...
- 在Wamp 添加站点和域名
在httpd.conf中使Include conf/extra/httpd-vhosts.conf生效 在conf/extra/httpd-vhosts.conf中加入如下代码 <Virtual ...
- hdu_5878_I Count Two Three(预处理)
题目链接:hdu_5878_I Count Two Three 题意: 给你一个n,让你找满足那个式子的不比n小的最小数 题解: 先上个预处理,然后二分查找就行 #include<bits/st ...
- Introducing 'bind'
原文地址:http://fsharpforfunandprofit.com/posts/computation-expressions-bind/ 上一篇讨论了如何理解let作为一个能实现contin ...
- Udemy - Angular 2 - The Complete Guide 笔记
1. install > npm install -g angular-cli 2. create app > ng new first-app 3. build app > cd ...