Вопрос проверяет понимание владения объектами и ответственности компонентов в архитектуре VIPER.
Слабую ссылку должен хранить компонент, который не владеет другим объектом логически. В VIPER это обычно Presenter по отношению к View. View — основной владелец экрана. Presenter лишь обслуживает его. Поэтому Presenter хранит weak ссылку на View.
Чтобы правильно выбрать weak ссылку, нужно понимать владение объектами.
Сильную ссылку хранит тот, кто:
отвечает за жизненный цикл объекта
логически владеет им
Слабую ссылку хранит тот, кто:
использует объект
но не управляет его жизнью
Типичное распределение:
View → Presenter (strong)
Presenter → View (weak)
Presenter → Interactor (strong)
Presenter → Router (strong или weak, по ситуации)
Presenter:
не создаёт View
не управляет её уничтожением
не должен удерживать UI
UIKit решает, когда View исчезает.
Если View хранить как strong:
экран не освобождается
deinit не вызывается
возникает утечка памяти
Если сомневаешься:
задай вопрос: «Кто должен жить дольше?»
более долгоживущий объект не должен удерживаться
Слабая ссылка всегда должна находиться у того компонента, который не владеет другим логически. В VIPER это почти всегда Presenter по отношению к View.