在这个答案How to make RACSignal to become hot?中,@ erikprice解释了冷热信号
A"热门信号"是一个发送价值的信号(并且可能是 工作)无论是否有任何订阅者。 A"冷信号"是 一个信号推迟其工作和发送任何值,直到它 有订阅者。冷信号将执行其工作并发送 每个订户的价值。
我问是否有人可以演示冷热信号的示例,以便更清楚
答案 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中