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可能会做你想要的,因为它保存所有值,并且只在返回的信号收到订阅时触发任何副作用(或开始任何工作).
| 归档时间: | 
 | 
| 查看次数: | 4343 次 | 
| 最近记录: |