ReactiveCocoa中的冷热信号有哪些例子?

onm*_*133 8 signals ios reactive-cocoa

在这个答案中如何使RACSignal变热?,@erikprice解释冷热信号

"热信号"是发送值(并且可能确实起作用)的信号,无论其是否具有任何订户."冷信号"是一种信号,它推迟其工作和发送任何值,直到它有一个用户.冷信号将执行其工作并为每个订户发送值.

我问是否有人可以演示冷热信号的示例,以便更清楚

Eim*_*tas 10

热信号被认为是发送值的信号,无论其是否具有任何订户

我正在使用热信号来监控网络可达性.通过实现的按钮动作RACCommand是热信号的另一个示例.

"冷信号"是一种信号,它推迟其工作和发送任何值,直到它有一个用户.

通过使AFNetworking反应,可以很好地证明这一点.创建一个返回表示请求的信号的方法.无论何时订阅该信号,都会执行网络请求.订阅者正在sendNext:以及sendCompleted何时请求成功以及sendError:何时请求失败.


onm*_*133 7

我发现RAC 3 Changelog也很有用

热信号现在是信号

在RAC 2的术语中,当调用-subscribe ...方法时,"热"RACSignal不会触发任何副作用.换句话说,热信号完全由生产者驱动和基于推送,而消费者(订户)对其生命周期不会产生任何影响.

此模式对于通知观察者无论发生什么事件都很有用.例如,无论是否观察到任何内容,加载布尔值都可能在true和false之间翻转.

具体地说,每个RACS主题都是一种热信号,因为转发的事件不是由主题上的订户数决定的.

冷信号现在是SignalProducers

在RAC 2的术语中,"冷"RACSignal为每次订阅执行一次其工作.换句话说,冷信号在调用-subscribe ...方法时执行副作用,并且如果在返回的RACDisposable上调用-dispose,则可能能够取消正在进行的工作.

这种模式非常有用,因为它可以最大限度地减少不必要的工作,并允许操作员在启动和取消工作时进行操作,例如take,retry,concat等.冷信号也类似于期货和承诺的工作方式,对于构造异步代码(如网络请求)非常有用.

我已经编写了Push vs Pull Signal,它基本上揭示了Swift 2中如何实现Push vs Pull Signal