何时使用RACReplaySubject与RACMulticastConnection?

Pou*_*sbo 16 objective-c reactive-programming reactive-cocoa

使用ReactiveCocoa,似乎有两种方法让订阅者从信号中接收相同的值,而不是重新触发生成这些值的任何操作:通过RACReplaySubject或RACMulticastConnection.

以下是RACReplaySubject的标题文档:

重播主题保存发送的值(达到其定义的容量)并将其重新发送给新订户.它还将重播错误或完成.

对于RACMulticastConnection:

多播连接封装了向许多订户共享信号订阅的想法.如果对基础信号的订阅涉及副作用或不应多次调用,则通常需要这样做.

多播信号仅在-[RACMulticastConnection connect]被呼叫时订阅 .在此之前,不会发送任何值signal.了解-[RACMulticastConnection autoconnect]如何 -[RACMulticastConnection connect]自动调用.

请注意,您不应手动创建RACMulticastConnection.而是使用 -[RACSignal publish]-[RACSignal multicast:].

有人可以提供关于何时使用RACReplaySubject或RACMulticastConnection的简单指南

Jus*_*ers 33

实际上,它们并不是相互排斥的,甚至可以一起使用.

其主要目的RACMulticastConnection是订阅基本信号,然后将该订阅多播到任意数量的其他订户,而不会多次触发基本信号的副作用.

RACMulticastConnection通过将值发送到RACSubject通过连接signal属性公开的私有来完成此操作.订户附加到主题(不会产生任何副作用),并且连接在那里转发所有基本信号的事件.

有几种不同的方法可以创建连接:

  • -publish创建了一个普通的连接RACSubject.此主题不会将以前的值重播给新订阅者.
  • -multicast:方法创建与您选择的主题的连接.你可以决定在RACReplaySubject这里使用.
  • -replay,-replayLast-replayLazily方法是创建一个连接的便利RACReplaySubject,然后还可以自动连接到它.

如果有疑问,-replayLazily可能会做你想要的,因为它保存所有值,并且只在返回的信号收到订阅时触发任何副作用(或开始任何工作).