Когда использовать 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
, вероятно, сделает то, что вы хотите, потому что он сохраняет все значения и только запускает любые побочные эффекты (или запускает любую работу), когда возвращаемый сигнал получает подписку.