Когда использовать RACReplaySubject и RACMulticastConnection?

Используя ReactiveCocoa, кажется, есть два способа, чтобы абоненты получали одни и те же значения из сигнала, а не повторно запускали все операция генерирует эти значения: через RACReplaySubject или RACMulticastConnection.

Вот заголовочные документы для RACReplaySubject:

Объект повтора сохраняет значения, которые он отправляет (до его определенной емкости)     и перенаправляет их новым подписчикам. Он также воспроизведет ошибку или     завершение.

И для RACMulticastConnection:

Многоадресное соединение инкапсулирует идею совместного использования одной подписки с  сигнал для многих подписчиков. Это чаще всего необходимо, если подписка на  основной сигнал связан с побочными эффектами или не должен называться больше, чем  один раз.

Многоадресный сигнал подписывается только тогда, когда  Вызывается -[RACMulticastConnection connect]. Пока это не произойдет, никакие значения  будет отправлено на signal. См. -[RACMulticastConnection autoconnect], как  -[RACMulticastConnection connect] можно вызвать автоматически.

Обратите внимание, что вы не должны создавать RACMulticastConnection вручную. Вместо этого используйте   -[RACSignal publish] или -[RACSignal multicast:].

Может ли кто-нибудь предоставить простые рекомендации относительно того, когда вы будете использовать RACReplaySubject или RACMulticastConnection?

Ответы

Ответ 1

Собственно, они не являются взаимоисключающими и могут даже использоваться вместе.

Основной целью RACMulticastConnection является подписка на базовый сигнал, а затем многоадресная рассылка этой подписки на любое количество других абонентов без запуска базовой стороны сигнала эффекты несколько раз.

RACMulticastConnection выполняет это путем отправки значений в закрытый RACSubject, который открывается через соединение signal. Подписчики присоединяются к объекту (который не вызывает никаких побочных эффектов), и соединение пересылает все события базового сигнала там.

Существует несколько различных способов создания соединения:

  • -publish создает соединение с простым RACSubject. Этот объект не будет воспроизводить предыдущие значения для новых подписчиков.
  • Метод -multicast: создает соединение с объектом по вашему выбору. Вы можете решить использовать RACReplaySubject здесь.
  • -replay, -replayLast и -replayLazily - это удобство для создания соединения с RACReplaySubject, а затем автоматически подключение к нему.

Если есть сомнения, -replayLazily, вероятно, сделает то, что вы хотите, потому что он сохраняет все значения и только запускает любые побочные эффекты (или запускает любую работу), когда возвращаемый сигнал получает подписку.