dispose
- 구독(Subscribe)을 처리, 메모리 누수를 막기 위함.
- 모든 subscribe의 return 에는 Disposable를 방출함.
- 사용하지 않는 Observable을 메모리에서 해제하기 위함.
- Disposable 프로토콜 안에는 disposed func으로 사용하지 않는 Observable을 DisposeBag에 넣어 관리 할 수 있음.
disposeBag
- 구독에 대해서 일일히 관리하는 것은 효율적이지 못하기 때문에, RxSwift에서 제공하는 disposedBag 타입을 이용
- disposeBag에는 disposables를 가지고 있음, disposable은 dispose bag이 할당 해제 하려고 할 때마다 dispose()를 호출
Observable.of(1, 2, 3)
.subscribe {
print($0)
}
.dispose()
- 위와 같이 Observable 하나하나 dispose 시켜주는게 번거롭기에 아래와 같이 DisposeBag에 넣어 관리함. 즉, 쓰레기통과 같은 원리이다.
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
Observable.of(4, 5, 6)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
Observable.of(7, 8, 9)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
// deinit 시 disposeBag에 담긴 Observable의 메모리 해제가 이르어짐
- 해당 Observable을 가지고 있는 클래스가 해제 될 때 DisposeBag에 담긴 Observable도 같이 해제함.