Использование RxSwift DisposeBag во ViewController - PullRequest
0 голосов
/ 06 марта 2019

Я новичок в RxSwift Framework.Я использую одноразовые вещи в своем ViewController и добавляю одноразовые вещи в DisposeBag.

. Где я должен освободить DisposeBag, чтобы избавиться от всех одноразовых предметов?В контроллере viewDidAppear или deinit?Какой метод безопаснее?

Ответы [ 3 ]

2 голосов
/ 07 марта 2019

Если вы объявите свой пакет утилизации как переменную экземпляра вашего подкласса контроллера представления, он будет автоматически освобожден, как только ваш контроллер представления будет освобожден. То есть, если он не сохраняется и чем-то еще.

0 голосов
/ 07 марта 2019

Какова цель одноразового использования

Здесь представлены одноразовые изделия, которые представляют собой дескриптор подписки наблюдаемого. Распоряжение отменяет действие наблюдаемой. Самый простой пример - сетевой запрос. Если утилизируемый предмет, относящийся к этому запросу, удаляется, если запрос не выполнен, он отменяется.

DisposeBag

Сумка для утилизации собирает несколько одноразовых сумок, жизненный цикл которых должен быть связан Когда мешок утилизируется, все одноразовые контейнеры в нем также утилизируются.

Где имеет смысл утилизировать сумку в View Controller

Теперь, когда мы знаем, что на самом деле делают одноразовые товары, вопрос, на который мы должны ответить, больше не «где я должен избавиться от своей сумки», а «когда имеет смысл отменить мои подписки»?

И здесь ответ действительно связан со случаем использования: иногда вам захочется прекратить любую работу, если контроллер представления больше не отображается на экране. В этом случае освобождение пакета утилизации в пределах viewDidDisappear: является хорошим вариантом. В других случаях, вероятно, лучше позволить пакету утилизации освободиться в deinit (жизненный цикл классов позаботится об этом без необходимости переопределять deinit), в тех случаях, когда вы предпочитаете, чтобы наблюдаемое продолжение продолжало работать даже если контроллер вида отсутствует на экране.

В заключение, ни один метод не является более безопасным, чем другой, он зависит только от вашего варианта использования.

0 голосов
/ 07 марта 2019

Если вы подписываетесь на свои наблюдаемые в функции viewWillAppear, то вам следует деиницировать свой disposeBag в функции viewDidDisappear. Если вы подпишетесь на свои наблюдаемые в viewDidLoad, не беспокойтесь об этом, сумка для утилизации автоматически утилизируется. Этот последний способ является стандартным.

...