DevPrep

Все темы › Combine

Холодные и горячие издатели: share, multicast и Future — что выполняется сколько раз?

Senior PRO

Суть

Холодный издатель начинает работу заново при каждой подписке и отдельно для каждого подписчика: dataTaskPublisher, Just, Deferred, Sequence.publisher. Два sink на один dataTaskPublisher — это два HTTP-запроса. Горячий издатель производит значения независимо от подписчиков и раздаёт одни и те же всем текущим: subjects, @Published, NotificationCenter.publisher, Timer.publish после connect.

Операторы наследуют холодность: map, decode, handleEvents выполняются отдельно для каждого подписчика. Отсюда дублирующиеся запросы, двойное логирование и побочные эффекты, выполненные N раз.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store