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
- 야곰닷넷
- IT동아리
- IT동아리 면접
- 스타터 캠프
- 기획자
- 넥스터즈 후기
- 오늘도 개발자가 안 된다고 말했다
- 넥스터즈
- 커리어 스타터 캠프
- 코드 스타터 캠프
- iOS개발자
- 커리어스타터캠프
- Swift
- GraphQL
- ios-커리어-스타터-캠프
- 강추
- 야곰 아카데미
- ios
- 야곰캠프
- 야곰
- 야곰아카데미
- 기획자의 여행법
- 코드스타터캠프
- 스위프트
- 넥스터즈 면접
- 애플디벨로퍼
- 오세요
- ios커리어스타터
- 부트캠프
- 테크캐스트
Archives
- Today
- Total
iOS Ellen
[RxSwift] BehaviorSubject 실험하기! 본문
BehaviorSubject를 사용할때 프로퍼티에 Behavior<Model>(value: Model())로 사용하면 어떤 일이 생기는지 실험해보자!
PublishSubject 사용한 경우
// PublishSubject 예시코드
class ViewModel {
private let modelSubject = PublishSubject<Model>()
private let bag = DisposeBag()
var modelObservable: PublishSubject<Model> {
return modelSubject
}
init() {
bind()
}
private func bind() {
input.touchButton
.subscribe { [weak self] _ in
guard let self = self else { return }
self.modelSubject.onNext(Model())
}.disposed(by: bag)
}
}
메모리상에 Model이 없다는 것을 확인할 수 있다.
modelSubject가 PublishSubejct가 아니라 BehaviorSubject가 된다면?
// modelSubject를 BehaviorSubject로 변경
class ViewModel {
private let modelSubject: BehaviorSubject<Modelable> = BehaviorSubject(value: Model())
private let bag = DisposeBag()
var modelObservable: BehaviorSubject<Model> {
return modelSubject
}
init() {
bind()
}
private func bind() {
input.touchButton
.subscribe { [weak self] _ in
guard let self = self else { return }
self.modelSubject.onNext(Model())
}.disposed(by: bag)
}
}
Model이 메모리상에 존재한다.
프로퍼티가 Model 인스턴스를 가지고 있으니까 해제되지 않는 것이 당연하다.
private lazy var modelSubject: BehaviorRelay<Model> = {
let relay = BehaviorRelay<Model>(value: Model())
return relay
}()
위와 같이 lazy var로 만든 이유는 BehaviorSubject가 빌드타임이 아닌 런타임에 메모리에 할당 될 수 있다.
이렇게 구현하면 조금이라도 앱 퍼포먼스에 도움이 되지 않을까?
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] PublishSubject & BehaviorSubject 이해하기 (0) | 2022.06.18 |
---|