使用ReactiveCocoa,似乎有两种方法让订阅者从信号中接收相同的值,而不是重新触发生成这些值的任何操作:通过RACReplaySubject或RACMulticastConnection。
以下是RACReplaySubject的标题文档:
重播主题保存发送的值(达到其定义的容量) 并将这些重新发送给新订阅者。它还会重播错误或 完成。
对于RACMulticastConnection:
多播连接封装了共享一个订阅的想法 向许多订户发出信号。如果订阅,通常需要这样做 潜在的信号涉及副作用或不应被称为超过 一次。
多播信号仅在订阅时订阅 调用
-[RACMulticastConnection connect]
。在此之前,没有价值观 将在signal
发送。请参阅-[RACMulticastConnection autoconnect]
了解具体方法-[RACMulticastConnection connect]
可以自动调用。请注意,您不应手动创建RACMulticastConnection。而是使用
-[RACSignal publish]
或-[RACSignal multicast:]
。
有人可以提供关于何时使用RACReplaySubject或RACMulticastConnection 的简单指南?
答案 0 :(得分:33)
实际上,它们并不相互排斥,甚至可以一起使用。
RACMulticastConnection
的主要目的是订阅基本信号,然后将订阅多播到任意数量的其他订阅者,而不会多次触发基本信号的副作用。< / p>
RACMulticastConnection
通过向私有RACSubject
发送值来实现此目的,该私有signal
通过连接的-publish
属性公开。订阅者附加到主题(不会产生任何副作用),并且连接会转发所有基本信号的事件。
创建连接有几种不同的方法:
-multicast:
与普通RACSubject
建立连接。此主题不会将以前的值重播给新订阅者。-replay
方法会根据您选择的主题创建连接。您可以决定在此使用RACReplaySubject
。-replayLast
,-replayLazily
和connecting方法可以方便地与RACReplaySubject
建立连接,然后自动{{3}}。< / LI>
如果有疑问,-replayLazily
可能会执行您想要的操作,因为它会保存所有值,并且只在返回的信号收到订阅时触发任何副作用(或启动任何工作)。