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
- List
- ios
- Android
- UIViewControllerTransitioningDelegate
- oberve url
- DataBinding
- DevelopmentRegion
- notifychanged
- url 추적
- Side Menu
- convert base64
- development language
- swift
- 상단 탭바
- SwiftUI
- url 관찰
- base64 변환
- Tuist
- scrolling tab
- detect url
- Swift Package Manager
- 스크롤 탭
- swift #swift keychain #keychain 사용법
- 기존 앱
- pod install
- ViewBuilder
- UIPresentationController
- GeometryReader
- transformation.map
- 개발자 면접
Archives
- Today
- Total
버그 잡이
RxSwift - Dispose & DisposeBag 본문
Observable은 subscribe 이후 complete 또는 error 이벤트가 발생하기 전까지 계속 next 이벤트를 발생시킵니다.
"계속" 이라는 단어는 프로그래머 입장에서 주의를 기울여야 하는 단어입니다.
계속 동작한다는 것은 굳이 동작하지 않아도 될 때도 동작한다는 것을 의미하고 이는 메모리 누수로 이어집니다.
오늘은 Observable을 subscribe(구독) 한 이후에 적절한 시점에 구독을 해지하는 방법에 대해서 알아보겠습니다.
1. Dispose
아래와 같이 observable을 구독하는 코드가 있습니다.
subscribe() 메서드는 기본적으로 disposable을 반환합니다.
disposable은 메모리 관리를 도와주는 객체입니다. (크게 리소스 취소와 실행 취소에 사용됩니다.)
let observable = Observable.of(1, 2, 3)
let subscription = observable.subscribe { print($0) }
dispose()를 활용하면 원하는 시점에 구독을 해지할 수 있습니다.
subscription.dispose()
2. DisposeBag
dispose()는 구독하는 것 마다 별도로 관리를 해줘야하는 번거로움이 있습니다.
disposeBag을 활용하면 여러개의 구독을 한번에 해제할 수 있습니다.
subscribe가 반환하는 disposable이 disposeBag에 담기고 disposeBag이 해제될때 disposable이 모두 해제되는 것입니다.
let disposeBag = DisposeBag()
let observable = Observable.of(1, 2, 3)
let subscription = observable
.subscribe { print($0) }
.disposed(by: disposeBag)
"disposeBag 은 언제 해제될까요?"
1. var bag = nil 처럼 직접 해제
2. class가 deinit 되면서 자동 해제
반응형
'RxSwift' 카테고리의 다른 글
RxSwift - bind() 말고 drive()를 써보는건 어때요? (2) | 2020.11.29 |
---|---|
RxSwift - subscribe시 onNext를 명시해줘야 하는 이유 (0) | 2020.10.26 |
RxSwift로 tableView 구현하기 (0) | 2020.09.20 |
RxSwift - tap으로 addTarget을 대체해보자. (1) | 2020.09.17 |
RxSwift - 버튼 활성화 상태 제어하기 #CombineLatest #Binding (0) | 2020.09.16 |
Comments