프로젝트를 진행하면서 nesting subcribe를 지양하기위해 flatMap 연산자를 적용하는 과정에서 flatMap은 none optional type만 반환해야해 [weak self]로 캡처 리스트를 정의하면 optional binding 과정이 복잡해지는 경우가 발생했습니다.
1번에 따르면 캡처된 참조가 nil이 되지 않을 때(생명주기가 더 길거나 같은 경우) unowned를 사용할 수 있습니다.
RxSwift에서는 DisposeBag이 Disposable들을 담고 있다가 deinit 되는 시점에 Disposable들을 dispose 시킵니다.
위 코드에서 button의 tap 이벤트마다 실행되는 클로저는 disposeBag에 담겼다가 ViewController가 deinit 되기 전에 disposeBag이 deinit 되면서 dispose 됩니다. 따라서 클로저 안에서 사용되는 self의 생명주기는 클로저의 생명주기보다 길거나 같다는 조건을 만족해 unowned를 사용할 수 있습니다.
프로젝트를 진행하면서 옵셔널 바인딩 과정이 복잡한 경우 self의 생명주기가 클로저의 생명주기보다 길거나 같은 경우에는 unowned를 사용했습니다.