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

时间:2015-03-31 17:29:04

标签: ios signals reactive-cocoa

在这个答案How to make RACSignal to become hot?中,@ erikprice解释了冷热信号

  

A"热门信号"是一个发送价值的信号(并且可能是   工作)无论是否有任何订阅者。 A"冷信号"是   一个信号推迟其工作和发送任何值,直到它   有订阅者。冷信号将执行其工作并发送   每个订户的价值。

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

2 个答案:

答案 0 :(得分:10)

  

热信号被认为是发送值的信号,无论它是否有任何订阅者

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

  

“冷信号”是一种信号,它推迟了它的工作和发送任何值,直到它有一个用户。

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

答案 1 :(得分:7)

我发现RAC 3 Changelog也很有用

热门信号现在是信号

  

在RAC 2的术语中,“热”RACSignal不会触发任何   调用-subscribe ...方法时的副作用。其他   单词,热信号完全由生产者驱动,基于推送,和   消费者(订阅者)对他们的一生没有任何影响。

     

此模式对于向观察者通知将要发生的事件非常有用   无论如何发生。例如,加载布尔值可能会翻转   无论是否有任何观察,它都在真与假之间。

     

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

冷信号现在是SignalProducers

  

在RAC 2的术语中,“冷”RACSignal执行其工作之一   每次订阅的时间。换句话说,冷信号执行侧   当一个-subscribe ...方法调用它们时,它们可能会产生影响   如果在返回时调用-dispose,则取消正在进行的工作   RACDisposable。

     

这种模式非常有用,因为它可以减少不必要的工作,   并允许操作员如take,retry,concat等操作   工作开始和取消。冷信号也与方式类似   期货和承诺起作用,对结构化有用   异步代码(如网络请求)。

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