리소스를 정리할때 사용함

let subscription1 = Observable.from([1, 2, 3])
    .subscribe(onNext: { elem in
        print("Next", elem)
    }, onError: { error in
        print("Error", error)
    }, onCompleted: {
        print("Completed")
    }, onDisposed: {
        print("Disposed")
    })

구독으로 next, error, completed, disoposed 상태를 받는다 하지만 Disposed는 출력되지 않는다.

subscription1.dispose()

dispose를 따로 해줘야 Disposed가 출력된다.

Observable.from([1, 2, 3])
    .subscribe {
        print($0)
    }
    .disposed(by: bag) // disposeBag에 담김

bag = DisposeBag() // 이전의 disposeBag 해제

dispose() 메서드를 사용하기 보다는 DisposeBag에 따로 담아서 리소스를 해제하는것을 권장한다고한다.

let subscription2 = Observable<Int>.interval (.seconds(1),
                                              scheduler: MainScheduler.instance)
    .subscribe(onNext: { elem in
        print("Next", elem)
    }, onError: { error in
        print("Error", error)
    }, onCompleted: {
        print("Completed")
    }, onDisposed: {
        print("Disposed")
    })

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
    subscription2.dispose()
}

주기적인 이벤트를 강제로 종료해야할떄 유용하다?