observable_signal - ShenYj/ShenYj.github.io GitHub Wiki
RAC 的核心是信号,信号在 RAC 中是通过 RACSignal
来表示的,信号是数据流,可以被绑定和传递
在 RAC 中信号分为两种:冷信号
和 热信号
-
冷信号
冷信号是被动的,只会在被订阅时向订阅者发送通知;
-
热信号
热信号是主动的,它会在任意时间发出通知,与订阅者的订阅时间无关。
也就是说冷信号所有的订阅者会在订阅时收到完全相同的序列;而订阅热信号之后,只会收到在订阅之后发出的序列。
热信号的订阅者能否收到消息取决于订阅的时间。
热信号在我们生活中有很多的例子,比如订阅杂志时并不会把之前所有的期刊都送到我们手中,
只会接收到订阅之后的期刊;而对于冷信号的话,举一个不恰当的例子,每一年的高考考生在
『订阅』高考之后,收到往年所有的试卷,并在高考之后会取消订阅
开发中的冷热信号
-
冷信号:(例如网络请求)
- 是被动的,只有当你订阅的时候,它才会发布消息
- 只能一对一,当有不同的订阅者,消息是重新完整发送。
-
热信号:(例如 UI 交互)
- 是主动的,尽管你并没有订阅事件,但是它会时刻推送,
- 可以有多个订阅者,是一对多,集合可以与订阅者共享信息。
RxSwift 的核心是 Observable,不仅限于 Observable,还包含 RxSwift 提供的一些特征序列,如: Single、Completable、Maybe、Driver、ControlEvent。
在阅读 RxSwift 中文手册时,强调了这两个概念
了解冷热信号量的区别对于实战开发还有有必要的
RAC 对冷信号和热信号的区别是很看重的,而 RxSwift 则不需要考虑是冷信号还是热信号(只能说没RAC那么重要,掌握每种序列的特征还是有必要的)
Observable 也是有冷热之分的: Hot and Cold Observables,是冷还是热,是通过publish和connect操作得到的