onDisposed
- observable 이 전달하는 이벤트가 X
- 리소스가 해제되는 시점에 자동으로 호출됨
- 가능하다면 리소스 정리를 직접 해주는게 좋음
let sub1 = Observable.from([1,2,3])
.subscribe(onNext: {elem in
print("Next", elem)
},onError: {
error in print("Error", error)
}, onCompleted: {
print("Completed")
}, onDisposed: {
print("Disposed")
})
리소스 해제
1. 직접 해제 하기
sub1.dispose()
2. DisposeBag 사용
var bag = DisposeBag()
Observable.from([1, 2, 3])
.subscribe(
print($0)
}.disposed(by: bag)
- 1번 방법보다 더 권장됨
- subscribe 가 return 하는 disposable 이 disposeBag 에 추가됨
- disposeBag 이 해제되는 시점에 함께 해지됨
* 임의의 내가 원하는 시점에 해제하려면?
swift bag = DisposeBag()
호출
=> 이전에 있던 disposeBag 이 해제됨
dispose()
호출
let sub2 = Observable<Int>.interval(.seconds(1),
scheduler: MainScheduler.instance)
.subscribe(onNext: {elem in
print("Next", elem)
},onError: { error in
print("Error", error)
}, onCompleted: {
print("Completed")
}, onDisposed: {
print("Disposed")
})
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {sub2.dispose()}
- next 다음에 completed 메소드가 실행되지 않음
- 때문에 권장되지 않음
=> takeuntil 과 같은 연산자 사용