RxSwift源码札记-6:observable的循环引用

231 阅读1分钟

Producer类中,当执行subscribe(_ observer: Observer)方法时,其内部创建SinkDisposer对象disposer

self.run(observer, cancel: disposer)中创建AnonymousObservableSink,持有了observer和disposer,并返回了AnonymousObservableSink和Observable的Handle返回的Disposable。

disposer调用setSinkAndSubscription

存储了AnonymousObservableSink和Observable的Handle返回的Disposable

那么SinkDisposer和AnonymousObservableSink相互引用了。

而被AnonymousObservableSink持有Observer中存在的订阅闭包可能持有self。

如果持有了self并且由self的垃圾袋管理,垃圾袋就不能打破SinkDisposer和AnonymousObservableSink的相互引用了。