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