728x90
Disposable
Observable의 라이프사이클이 Completed event나 Error event로 종료되면 모든 리소스를 정리하고 Dispose 된다.
Combine의 AnyCancellable과 유사한 개념이다.
Dispose가 수행되는 시점은 아래의 코드와 같이 작성하면 확인할 수 있다.
let s = Observable.from([1, 2, 3])
.subscribe(onNext: { elem in
print("Next", elem)
}, onError: { error in
print("Error", error)
}, onCompleted: {
print("Completed")
}, onDisposed: {
print("Disposed")
})
onDispose는 어떤 이벤트에 대한 emission이 아니고 그저 dispose가 수행되는 시점을 캐치하는 것 뿐이다.
즉, 해당 연산자를 구현하지 않아도 동일하게 dispose는 수행된다.
하지만 complete의 여부와 상관 없이 공식 문서 상으로 DisposeBag을 사용해서 일괄적으로 dispose 처리하는 것을 권장하고 있다.
DisposeBag
이전 포스트에서 이미 disposeBag을 사용한 코드를 작성한 적이 있다.
아래와 같이 DisposeBag을 선언하고 구독 이후에 disposed(by:)를 통해 DisposeBag을 연결해주면 된다.
이렇게 연결된 경우에 DisposeBag 변수가 해제되는 시점이나 해당 변수에 새로운 DisposeBag을 담아주는 시점에 연결된 모든 리소스가 한 번에 정리된다.
Combine의 Set<AnyCancellable>과 동일한 기능을 한다.
let bag = DisposeBag()
let oj = Observable<Int>.just(1)
oj.subscribe { print("oj", $0) }.disposed(by: bag)
bag = DisposeBag() // 명시적으로 일괄 dispose 처리
개인적인 공부를 위해 작성한 내용이므로 틀린 내용이나 수정이 필요한 부분이 있을 수 있으니 감안하고 봐주시면 감사하겠습니다.
728x90
'Swift > RxSwift' 카테고리의 다른 글
[RxSwift] Observable 과 Observer (0) | 2024.04.01 |
---|---|
[RxSwift] RxSwift란 (0) | 2024.01.12 |