반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- @State
- NavigationLink
- RFC1738/1808
- operator
- init
- graphql
- Xcode
- nonisolated
- SWIFT
- Creating Operators
- @EnvironmentObject
- @Environment
- SwiftUI
- ios14
- subject
- RxCocoa
- Bug
- typeorm
- RxSwift
- Operators
- dismiss
- swift6
- init?
- vim
- @Binding
- URL(string:)
- nestjs
- Operater
- IOS
- NullObject
Archives
- Today
- Total
Tunko Development Diary
RxSwift) Disposables 란? 본문
요약
- Disposable 의 기능은 리소스 해제, 실행취소
- Subscription Disposable 라고도 불립니다.
- DisposeBag 사용방법
옵저버블의 실행을 취소하고 리소스를 정리하는 방법
Observable.from([1,2,3])
.subscribe { elem in
print("Next", elem)
} onError: { error in
print("Error", error)
} onCompleted: {
print("onCompleted")
} onDisposed: {
print("Disposed")
}
// 결과
Next 1
Next 2
Next 3
onCompleted
Disposed
Disposed는 옵저버블이 전달하는 이벤트는 아닙니다.
옵저버블과 관련된 모든 리소스가 해제된 후에 Disposed가 호출 됩니다.
옵저버블이 onCompleted 나 onError 이벤트를 통해 종료되어도 특별한 문제는 없습니다. 하지만 RxSwift공식 문서를 보면 이런 경우에도 직접적으로 리소스를 정리하라고 명시되어 있습니다.
이때 사용하는것이 Disposable 입니다.
아래 예시처럼 할 수 있습니다.
let ob = Observable.from([1,2,3])
.subscribe {
print($0)
}
ob.dispose()
하지만 DisposeBag 사용을 권장합니다.
var bag = DisposeBag()
Observable.from([1,2,3])
.subscribe {
print($0)
}
.disposed(by: bag)
마지막으로 DIsposables 의 실행취소 예시입니다.
let sub2 = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
.subscribe { elem in
print("Next", elem)
} onError: { error in
print("Error", error)
} onCompleted: {
print("onCompleted")
} onDisposed: {
print("Disposed")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
sub2.dispose()
}
Next 0
Next 1
Next 2
Disposed
출력된 로그를 보면 onCompleted 나 onError 이벤트가 없습니다.
이유는 3초뒤에 명시적으로 sub2옵저버블에 대한 모든 리소스가 해지 되기때문이다. 그래서 이벤트도 받을 수 없다. 그렇기 때문에 이렇게 직접적으로 dispose 시키는건 가능한 피해야 합니다.
반응형
'Development > RxSwift' 카테고리의 다른 글
RxSwift) PublishSubject 란? (0) | 2022.05.30 |
---|---|
Subject 란? (0) | 2022.05.30 |
RxSwift) Operators 란? (0) | 2022.05.30 |
RxSwift) Observables 과 Observers (0) | 2022.05.30 |
Reactive Programming 란? (0) | 2022.05.30 |
Comments