【问题标题】:What are examples of hot and cold signal in ReactiveCocoa?ReactiveCocoa 中冷热信号的例子有哪些?
【发布时间】:2015-06-05 03:44:07
【问题描述】:

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

“热信号”是发送值的信号(并且可能 工作)不管它是否有任何订阅者。 “冷信号”是 延迟其工作和发送任何值的信号,直到它 有一个订阅者。一个冷信号将执行它的工作并发送 每个订阅者的价值。

请问有人可以演示冷热信号的例子,这样会更清楚

【问题讨论】:

标签: ios signals reactive-cocoa


【解决方案1】:

热信号被认为是无论是否有订阅者都发送值的信号

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

“冷信号”是一种延迟其工作和发送任何值直到它有订阅者的信号。

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

【讨论】:

    【解决方案2】:

    我发现RAC 3 Changelog 也很有用

    热信号现在是信号

    在 RAC 2 的术语中,“热”RACSignal 不会触发任何 调用 -subscribe… 方法时的副作用。其他 换句话说,热信号完全是生产者驱动和推送的,并且 消费者(订阅者)不会对其生命周期产生任何影响。

    这种模式对于通知观察者有关将发生的事件很有用 无论如何都会发生。例如,加载布尔值可能会翻转 真假之间,不管有没有在观察它。

    具体来说,每个 RACSubject 都是一种热信号,因为 转发的事件不是由订阅者数量决定的 关于这个主题。

    冷信号现在是 SignalProducers

    在 RAC 2 的术语中,“冷” RACSignal 执行其工作 每次订阅的时间。换句话说,冷信号执行侧 对它们调用 -subscribe... 方法时的效果,并且可能能够 如果在返回时调用 -dispose,则取消正在进行的工作 RAC一次性。

    这种模式非常有用,因为它可以最大程度地减少不必要的工作, 并允许像 take、retry、concat 等操作符来操作何时 工作开始和取消。冷信号也类似于 futures 和 promises 工作,并且可以用于结构化 异步代码(如网络请求)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2010-12-16
      • 1970-01-01
      相关资源
      最近更新 更多