热信号和冷信号
在 ReactiveCocoa 中,RACSignal
可以分为热信号(Hot Signals)和冷信号(Cold Signals),这两种信号在行为和使用场景上有明显的区别。
冷信号(Cold Signals)
定义:冷信号在创建时并不会发出任何值,只有在有订阅者订阅时,信号才会开始发出值。
特性:
每次订阅都会创建一个新的信号实例。
每个订阅者都会接收到信号的独立副本,意味着每个订阅者都从信号的开始点接收值。
示例:
RACSignal.createSignal:
创建的信号通常是冷信号,只有在订阅时才开始执行。
热信号(Hot Signals)
定义:热信号在创建时就会开始发出值,不依赖于订阅者的存在。
特性:
所有的订阅者共享同一个信号实例,意味着订阅者之间是相互独立的,但会接收到相同的事件。
信号在订阅之前就可以开始发出值。
示例:
通过
RACSubject
或其他类似的方式创建的信号通常是热信号。
在这个例子中,Subscriber 1
会接收到 "Hello"和"world"
,而 Subscriber 2
则会接收到 "World"
,但不会接收到 "Hello"
,因为它在订阅时已经发出。
总结
冷信号:每个订阅者都接收到独立的事件流,信号在订阅时开始发出值。
热信号:所有订阅者共享同一个事件流,信号在创建时开始发出值,不依赖于订阅者的存在。
Last updated