Какова цель одноразового использования
Здесь представлены одноразовые изделия, которые представляют собой дескриптор подписки наблюдаемого. Распоряжение отменяет действие наблюдаемой. Самый простой пример - сетевой запрос. Если утилизируемый предмет, относящийся к этому запросу, удаляется, если запрос не выполнен, он отменяется.
DisposeBag
Сумка для утилизации собирает несколько одноразовых сумок, жизненный цикл которых должен быть связан Когда мешок утилизируется, все одноразовые контейнеры в нем также утилизируются.
Где имеет смысл утилизировать сумку в View Controller
Теперь, когда мы знаем, что на самом деле делают одноразовые товары, вопрос, на который мы должны ответить, больше не «где я должен избавиться от своей сумки», а «когда имеет смысл отменить мои подписки»?
И здесь ответ действительно связан со случаем использования: иногда вам захочется прекратить любую работу, если контроллер представления больше не отображается на экране. В этом случае освобождение пакета утилизации в пределах viewDidDisappear:
является хорошим вариантом. В других случаях, вероятно, лучше позволить пакету утилизации освободиться в deinit
(жизненный цикл классов позаботится об этом без необходимости переопределять deinit), в тех случаях, когда вы предпочитаете, чтобы наблюдаемое продолжение продолжало работать даже если контроллер вида отсутствует на экране.
В заключение, ни один метод не является более безопасным, чем другой, он зависит только от вашего варианта использования.