2013-02-25 6 views
15

ReactiveCocoaを使用すると、VAC RACReplaySubjectまたはRACMulticastConnectionなど、これらの値を生成する操作を再度トリガーするのではなく、信号から同じ値を受信する2つの方法があるようです。ここRACReplaySubjectとRACMulticastConnectionのどちらを使用するのですか?

がRACReplaySubjectのヘッダドキュメントは、次のとおり

再生対象は、それが送信された値(その定義された容量まで) を保存し、新しい加入者にそれらを再送します。また、 のエラーが再生されます。

そしてRACMulticastConnection用:

マルチキャスト接続は、多くの加入者に 信号に1つのサブスクリプションを共有するというアイデアをカプセル化します。これは、 サブスクリプションのサブスクリプションに副作用が含まれているか、 を1回以上呼び出すべきでない場合に最もよく必要です。

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

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

誰かがあなたがRACReplaySubjectやRACMulticastConnectionを使用するときに同じくらい簡単ガイドラインを提供することはできますか?

答えて

32

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

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

RACMulticastConnectionは、接続のsignalプロパティで公開されているプラ​​イベートRACSubjectに値を送信することでこれを実現します。サブスクライバはサブジェクトに接続し(副作用は発生しません)、接続はすべてのベース信号のイベントをそこに転送します。

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

  • -publishは、プレーンRACSubjectとの接続を作成します。このサブジェクトは、新しいサブスクライバに以前の値を再生しません。
  • -multicast:メソッドは、選択したテーマとの接続を作成します。 RACReplaySubjectをここで使用することができます。
  • RACReplaySubjectで接続を作成してから、自動的にconnectingとすると、-replay-replayLast、および-replayLazilyの方法が便利です。疑問がある場合はそれが返される信号は、サブスクリプションを受信したときにすべての値を保存し、唯一の副作用をトリガーする(またはいずれかの作業を開始します)ので

は、-replayLazilyはおそらく、あなたがやりたいだろう。

+0

優秀、ありがとう! – Poulsbo

+0

RACMulticastConnectionはWebSocketクライアントの "onMessage"ブロックに適していますか?次に、加入者は、異なるデータ型とは何かを適切にフィルタリングできますか? –

+0

@MaxAlexanderそれ以上の詳細がなくても答えられるとは思わないので、別の質問をすることをお勧めします。 –

関連する問題