Вопрос проверяет понимание управления памятью и жизненным циклом подписок в RxSwift.
DisposeBag используется для автоматического освобождения подписок RxSwift. Он хранит все созданные подписки и отменяет их при деинициализации. Это позволяет избежать утечек памяти и ручного управления каждой подпиской. Обычно DisposeBag живет столько же, сколько объект-владелец, например ViewController или ViewModel.
В RxSwift каждая подписка должна быть корректно завершена, иначе объект может остаться в памяти. DisposeBag решает эту проблему централизованно.
Определение:
DisposeBag — это контейнер для подписок, который автоматически вызывает dispose() для всех хранимых подписок при своем уничтожении.
Основная идея:
подписка добавляется в DisposeBag
DisposeBag освобождается вместе с объектом
все подписки корректно завершаются
Обычно DisposeBag объявляется как свойство класса:
final class ExampleViewController: UIViewController {
private let disposeBag = DisposeBag()
}
Подписка добавляется так:
observable
.subscribe(onNext: { value in
print(value)
})
.disposed(by: disposeBag)
DisposeBag:
предотвращает утечки памяти
упрощает код
делает жизненный цикл подписок очевидным
DisposeBag стоит использовать всегда, когда подписки должны жить столько же, сколько объект-владелец, например экран или ViewModel.