首页 > 科技 >

Pull-Driven 的数据流 RACSequence

2018-08-21 03:58:15 网络整理 阅读:92 评论:0

原标题:Pull-Driven 的数据流 RACSequence疯狂造轮子的工程师

ReactiveCocoa 在设计上很大程度借鉴了 Reactive Extension 中的概念,可以说 ReactiveCocoa 是 Rx 在 Objective-C 语言中的实现。

在 Rx 中主要的两个概念信号和序列都在 ReactiveCocoa 中有着相对应的组件 RACSignal 和 RACSequence,上一篇文章已经对前者有一个简单的介绍,而这篇文章主要会介绍后者,也就是 RACSequence。 Push-Driven & Pull-Driven

虽然这篇文章主要介绍 RACSequence,但是在介绍它之前,笔者想先就推驱动(push-driven)和拉驱动(pull-driven)这两个概念做一点简单的说明。

RACSignal 和 RACSequence 都是 RACStream 的子类,它们不仅共享了来自父类的很多方法,也都表示数据流。

Pull-Driven 的数据流 RACSequence

RACSignal 和 RACSequence 最大区别就是:RACSignal 是推驱动的,也就是在每次信号中的出现新的数据时,所有的订阅者都会自动接受到最新的值;RACSequence 作为推驱动的数据流,在改变时并不会通知使用当前序列的对象,只有使用者再次从这个 RACSequence 对象中获取数据才能更新,它的更新是需要使用者自己拉取的。

由于拉驱动在数据改变时,并不会主动推送给『订阅者』,所以往往适用于简化集合类对象等操作,相比于推驱动,它的适应场合较少。

Pull-Driven 的数据流 RACSequence

图片中的内容来自 Reactive Cocoa · NSHipster 中。

预加载与延迟加载

在 RACSequence 中还涉及到另外一对概念,也就是预加载和延迟加载(也叫懒加载);如果你之前学习过 Lisp 这门编程语言,那么你一定知道 Lisp 中有两种列表,一种是正常的列表 List,另一种叫做流 Stream,这两者的主要区别就是流的加载是延迟加载的,只有在真正使用数据时才会计算数据的内容。

Pull-Driven 的数据流 RACSequence

由于流是懒加载的,这也就是说它可以表示无穷长度的列表。

相关文章