当使用RACReplaySubject与RACMulticastConnection?(When t

2019-08-17 03:59发布

使用ReactiveCocoa ,似乎有两种方式有用户从信号接收到相同的价值观,而不是重新触发任何操作生成这些值:通过RACReplaySubject或RACMulticastConnection。

下面是RACReplaySubject头文档:

重播主题保存它被发送的值(直到其限定容量)并重新发送那些新用户。 它也将重播错误或完成。

而对于RACMulticastConnection:

组播连接的封装共享一个订阅一个信号,许多用户的想法。 如果订阅潜在信号涉及副作用或者不应该叫不止一次这是最常见的需要。

该多播信号仅订阅时-[RACMulticastConnection connect]被调用。 在此之前,没有值将上发送signal 。 请参阅-[RACMulticastConnection autoconnect]如何-[RACMulticastConnection connect] ,可以自动调用。

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

有人可以提供简单的指引,当你将使用RACReplaySubject或RACMulticastConnection?

Answer 1:

其实,他们不是相互排斥的,甚至可以一起使用。

的主要目的RACMulticastConnection是订阅一个基本信号,然后多播该订阅到任何数量的其他用户, 而无需多次触发基本信号的副作用。

RACMulticastConnection通过发送值到私有实现这一RACSubject ,它通过连接的暴露signal属性。 认购人重视的主题(这不会造成任何副作用),以及连接转发所有基站信号的事件的出现。

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

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

如果有疑问, -replayLazily可能会做你想要什么,因为它节省了所有的值,只有触发任何副作用(或启动任何工作)时,返回的信号接收订阅。



文章来源: When to use RACReplaySubject vs. RACMulticastConnection?