refCount는 ConnectableObservableType의 extension 으로 구현되어 있다.
이 연산자는 RefCount라는 Observable 을 리턴한다.
내부에 ConnectableObsvable을 유지하면서, 새로운 구독자가 추가되는 시점에 자동으로 connect() 메소드를 호출한다.
구독자가 구독을 중지하고, 다른 구독자가 없다면 sequence 를 중지한다.
connect()
를 호출한다.sequence
를 시작한다.let bag = DisposeBag()
let source = Observable<Int>
.interval(.seconds(1), scheduler: MainScheduler.instance)
.debug()
.publish()
.refCount()
let observer1 = source
.subscribe { print("🔵", $0) }
// 내부에서 connect를 자동으로 호출하기 때문에 필요가 없다.
// source.connect()
// 이 시점에 다른 구독자가 없기 때문에 disposed
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
observer1.dispose()
}
// 다시 시작하기 때문에 0부터 출력
DispatchQueue.main.asyncAfter(deadline: .now() + 7) {
let observer2 = source.subscribe { print("🔴", $0) }
// 이 때도 구독자가 취소되어 없기 때문에 dispose
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
observer2.dispose()
}
}
refCount 연산자를 사용하면 ConncetableObservable을 직접 관리할 필요가 없다. connect도 직접 호출하고 필요한 시점에 dispose도 자동으로 관리한다.