16

ReactiveCocoaを使用すると、値を生成する操作を再トリガーするのではなく、シグナルから同じ値をサブスクライバーに受信させる方法が 2 つあるようです: RACReplaySubject または RACMulticastConnection 経由。

RACReplaySubject のヘッダー ドキュメントは次のとおりです。

リプレイ サブジェクトは、送信された値を (定義された容量まで) 保存し、それらを新しいサブスクライバーに再送信します。また、エラーまたは完了を再生します。

RACMulticastConnection の場合:

マルチキャスト接続は、信号への 1 つのサブスクリプションを多くのサブスクライバーに共有するという考えをカプセル化します。これは、基になるシグナルへのサブスクリプションに副作用が伴う場合、または複数回呼び出す必要がない場合に最も頻繁に必要になります。

-[RACMulticastConnection connect]マルチキャストされたシグナルは、が呼び出されたときにのみサブスクライブさ れます。それが起こるまで、値は に送信されませんsignal。を自動的に呼び出す-[RACMulticastConnection autoconnect]方法について は、を参照してください。-[RACMulticastConnection connect]

RACMulticastConnection を手動で作成しないでください。代わりに -[RACSignal publish]またはを使用します-[RACSignal multicast:]

RACReplaySubject または RACMulticastConnection をいつ使用するかについて、誰かが簡単なガイドラインを提供できますか?

4

1 に答える 1

33

実際、これらは相互に排他的ではなく、一緒に使用することもできます。

の主な目的は、ベース シグナルにサブスクライブし、ベース シグナルの副作用を複数回トリガーすることなくRACMulticastConnection、そのサブスクリプションを任意の数の他のサブスクライバーにマルチキャストすることです。

RACMulticastConnectionRACSubjectこれは、接続のsignalプロパティを介して公開されるprivate に値を送信することによって実現されます。サブスクライバーはサブジェクトにアタッチし (副作用は発生しません)、コネクションはベース シグナルのすべてのイベントをサブジェクトに転送します。

接続を作成するには、いくつかの方法があります。

  • -publishプレーン との接続を作成しますRACSubject。このサブジェクトは、以前の値を新しいサブスクライバーに再生しません。
  • -multicast:メソッドは、選択した対象との接続を作成します。ここでa を使用することができRACReplaySubjectます。
  • 、、およびメソッドは-replay、との接続を作成し、自動的に接続するのに便利です。-replayLast-replayLazilyRACReplaySubject

疑わしい場合は、-replayLazilyすべての値を保存し、返されたシグナルがサブスクリプションを受信したときにのみ副作用をトリガーする (または作業を開始する) ため、おそらくあなたが望むことを行います。

于 2013-03-10T05:29:34.020 に答える