这篇博客将会继续翻译RAC的官方文档Framework Overview. 主要是对RAC这和框架进行概览的介绍和学习。同时也可以参考我前面的两篇翻译《响应式编程框架ReactiveCocoa学习——基本操作符》《响应式编程框架ReactiveCocoa介绍与入门》。其中ReactiveCocoa的Github官方地址为 https://github.com/ReactiveCocoa/ReactiveCocoa 。

这篇文档包括了RAC中的对不同组件的高层描述,并解释如何进行结合工作并按自己的功能模块进行分离。这篇文档可以成为学习新的模块或者特定文档的开始。

【Stream 流】

流,在RAC中代表的是RACStream抽象类,是任何对象值的序列。我们可以立即获取值或者在之后某个时间获取,但是它们一定是被顺序检索的。在RAC中不可能出现当检索到流中的第二值的时候正在计算或者等待第一个值。流可以认为是原子的,所以在处理一些事情中,可以使用基本的操作符来进行复杂的操作(比如 -bind)。RACStream本身并没有太大的作用,大多数的流我们用的都是signals信号和sequence序列来代替。

【Signals 信号】

一个信号,在RAC中代表的是RACSignal类,是一种push-driven主动推送的流。信号一般代表的是某种未来会传递的数据。一个任务的执行、数据的接收,信号中值的发送,会主动发送到每一个Subscriber订阅者。我们必须要订阅这些信号才能访问到这些信号中的值。信号给他们的订阅者发送三种不同的事件类型:

1.next事件:next从流中提供一个新的值。RACStream方法只能操作这种类型的事件。与原生Cocoa框架不同,这对于包括nil的信号是完全合法的。

2.error事件:该事件表示早一个信号正常结束之前发生了一个错误。error事件中可以包括NSError对象,可以检测错误原因。错误必须需要特定处理,它们没有包括在流的值中。

3.completed事件:表示信号正常结束,同时也没有其他更多的值添加到流中。Completed也需要被特定处理,它们也没有被包含在流的值中。

信号的生命周期包含了任意数量的next事件,并在一个error或者completed事件后结束。

【Subscription 订阅】

一个订阅者是在等待signal事件的发生。在RAC中,订阅者是表示一类符合RACSubscriber协议的对象。一次订阅是通过调用-subscribeNext:error:completed产生的。从技术实现上来说,大多数RACStream和RACSignal操作符都能创建一个订阅。订阅会持有它的signal对象,并且在信号completed或者error的时候释放。当然,订阅也可以被手动的释放。

【Subjects】

一个Subject,在RAC中代表的是RACSubject类,是一种可以被手动控制的信号。Subject可以认为是可变的信号,就像NSMutableArray对于NSArray一样。Subject是很有用的连接非RAC代码到RAC的很有用的工具。举个例子,我们在block回调中处理大量的程序逻辑,其实我们可以使用发送事件到Subject去实现。然后Subject可以返回一个RACSignal对象,隐藏了回调中的实现细节。一些Subject也提供了额外的功能,比如RACReplaySubject可以为将来的订阅者缓存事件,比如网络请求先完成,然后其他对象再去处理结果。

【Commands】

command,在RAC中表示的是RACCommand类,可以创建或者订阅一个信号用来响应某些action动作。这可以很方便的来处理App中的用户交互。一般是UI动作来触发一个command,比如按钮点击。基于信号的Commands可以自动置为无效,并且代表了UI的无效状态。在OS X中,可以给NSButton添加一个rac_command属性,来自动设置这种行为。

【Connections】

connection,在RAC中代表的是RACMulticastConnection类,是一种可以被多个订阅者公用的subscription.信号默认是冷信号,也就是说每当新增一个订阅的时候,信号都会重新执行他们的任务。可能有时候这种行为是需要的,因为对于每个订阅者都需要重新计算数据,但是如果这种副作用本身产生很高的成本(比如网络请求),那么就会产生一定的问题。

一个connection通过-publish或者-multicast来创建,方法实现是在RACSignal中。一旦连接,这个connection的信号就是热信号,并且连接的connection都是激活状态直到被释放。

【Sequences】

sequence,在RAC中代表的是RACSequence类,是一种pull-driven的流。Sequence是一种集合类型,类似NSArray.但是又与数组不同的是,sequence的值默认是懒计算的(只有它们在被需要的时候才会计算)。这可以默认提升性能。和原生Cocoa中的集合类型一样,sequence也不能包含nil.  对于Cocoa中的集合类,RAC增加了-rac_sequence这个扩展方法,然后就可以让集合可以使用RACSequence来替代。

【Disposables】

RACDisposable类用来做资源的取消和清理工作。Disposables常常用来取消对一个信号的订阅。当一个订阅取消后,相对应的订阅者就不再会收到信号发出的任何事件。除此之外,和该订阅相关的所有任何(比如后台进程,网络请求)都会被取消,因为他们的结果已经不需要了。

【Schedulers】

scheduler,代表的是RACScheduler类,是一个串行的信号执行队列,用来执行任务或者传递结果。Schedulers类似于GCD中的队列,但是scheduler支持取消队列(通过disposables),并总是串行执行的。+immediateScheduler方法的异常就是不提供同步执行,这也有效的避免了死锁,同时鼓励使用信号运算符来替代block。RACScheduler也类似于NSOperationQueue,但是scheduler不允许任务重新排序或者相互依赖。

【Value types】

RAC提供了多种类来方便的表示流中的值:

1.RACTuple:是一个常量大小的集合类型,可以包含nil(使用RACTupleNil表示)。这个常常用来表示多种流组合后的值。

2.RACUnit:是一个单例的空值。

3.RACEvent:用一个单一的值来表示信号事件,主要使用的方法是RACSignal中的-materialize。

本文主要翻译自 ReactiveCocoa官方文档Framework Overview。

响应式编程框架ReactiveCocoa学习——框架概览相关推荐

  1. [iOS] 响应式编程开发-ReactiveCocoa(一)

    什么是响应式编程 响应式编程是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播. 例如,在命令式编程环境中 ...

  2. IOS响应式编程框架ReactiveCocoa(RAC)使用示例

    本文转载至 http://blog.csdn.net/dfqin/article/details/39164241 IOS ReactiveCocoa RAC 响应式编程 RACSignal Reac ...

  3. ⒈响应式编程 Project Reactor 概述

    文章目录 What is Reactive Programming? Project Reactor & Reactive Programming 总览 Features Best pract ...

  4. iOS 高大上函数响应式编程框架ReactiveCocoa学习笔记1 简介

    ReactiveCocoa函数响应式编程 一.简介 ReactiveCocoa(其简称为RAC)是函数响应式编程框架.RAC具有函数式编程和响应式编程的特性.它主要吸取了.Net的 Reactive ...

  5. 响应式编程框架ReactiveCocoa介绍与入门

    ReactiveCocoa是Github团队开发的第三方函数式响应式编程框架,在目前市面上的很多iOS App都大量使用了这个框架.以下我简称这个框架为RAC.我下面会通过几篇博客来和大家一起学习这个 ...

  6. 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件学习

    一.介绍UniRx插件 UniRx是一种基于Unity3D的响应式编程框架. UniRx就是Unity版本的Rx响应式扩展,响应式就是观察者和定时器,扩展指的是LINQ的操作符.Rx响应式扩展的特点就 ...

  7. 【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件教程

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  8. RXJava2响应式编程框架设计三---Rxjava2背压、生命周期

    在上一次https://www.cnblogs.com/webor2006/p/12348890.html中已经完成了对RxJava2的整个线程切换原理的详细剖析了,这次继续来学习它其它比较重要的知识 ...

  9. 响应式编程以及反应式编程框架Reactor3的简单介绍

    前言 Reactor 3是一个围绕Reactive Streams规范构建的库,它在JVM上引入了响应式编程的一个范例.目前Spring5 引入的Webflux就是reactor 3实现的一个响应式w ...

最新文章

  1. 如何配置FastReport.Net环境
  2. SAP MM服务类采购申请里的总账科目的修改
  3. 学python可以做什么知乎-Python学到什么程度可以面试工作?
  4. linux 查明文密码,win10系统查看明文密码的操作方法
  5. 关于vmware 桥接 不识别无线网卡 问题解决方案
  6. 北京大学计算机研究所所长,北大计算机研究所所长郭宗明:探索新机制,释放科研创新能力...
  7. IL2CPP的优化 : Devirtualization 去虚拟化
  8. SAP云平台cf push命令报错误码44的解决方法
  9. python中readlines_python中read() readline()以及readlines()用法
  10. 书摘:35岁之前成功的12条黄金法则
  11. eclipseEE连接mysql_mysql-eclipseEE连接MySQL出现问题,哪位大神可以帮我看看*^__^*,非常感谢...
  12. 外链引入css有哪些方式_CSS 文件的4种引入方式
  13. c语言调整图片分辨率,如何不改变图片分辨率,并且缩小图片质量-电脑自学网...
  14. Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
  15. UVA10049 Self-describing Sequence【数列】
  16. 360的编码html怎么写,html5之meta charset网页字符编码简写
  17. 多WEB服务器共享SESSION方案
  18. php 网络爬虫,爬一下花瓣的图片
  19. 小程序 Vant Weapp 使用插槽自定义 Cell 的左侧图标
  20. 气动隔膜阀的工作原理

热门文章

  1. qt210 裸机ac97
  2. JAVA生成grib文件_wgrib读grib数据
  3. JS面向对象思想(OOP)
  4. 【算法题目】DFS BFS 动态规划 零钱兑换 Python
  5. 牛客竞赛语法入门班循环结构习题C++版本参考代码及部分解析
  6. 牛客竞赛(CSP高级组) 信息学奥赛 950K 糖果传递(详细答案及简析)
  7. uniapp使用Nodejs自动化配置page.json生成多套终端代码
  8. 听劝,不要试图以编程为基础去学习网络安全
  9. 手眼标定(眼在手外,眼在手上代码)
  10. MATLAB medfilt2(中值滤波)应用