RxSwift源代码理解 - Producer
ObserverType -> 观察者
ObservableType -> 被观察者,有一个方法subscribe(订阅),会传一个观察者参数。被一个观察者订阅后,会在合适的时机调用观察者的on方法,来完成信号的传递。subscribe会返回一个Disposable 来实现资源释放管理
Disposable -> 实现这个协议的类 可被加入资源释放管理
Producer-> 生产者,主要作用信号发射或者处理,也是一个被观察者。
一些生产者在被subscribe时只会发出一些信号,不做其他处理 比如 Just、Empty。
Just.swift大部分生产者 subscribe方法里面一般会有:一个或者多个被观察者属性_source(比如上一个生产者、Subject)。一个run方法,run返回一个封装好的观察者(sink)和一个Disposable(subscription),这两个返回值将会被SinkDisposer持有管理,SinkDisposer释放时会同时释放sink和subscription。
Producer.swiftsink本身是一个观察者,对observer的一层包装,它内部会持有一个observer,进行一些信号的处理转换。有时候会调用cancel(SinkDisposer)属性主动dispose,(Sink和SinkDisposer是循环引用的)。sink有时候也会持有生产者,内部在适当的时候调用生产者的一些属性。
一些subscription是通过调用_source的subscribe方法返回,subscribe方法所传的观察者参数就是sink,但是也有一些subscription需要在sink的run方法进行一些加工返回。
Map.swift DistinctUntilChanged.swift Debounce.swift整体来说这样的的生产者本身是对_source的一层包装,在subscribe的时候,所做的事情就是,把观察者包装成一个新的观察者sink,然后调用_source的subscribe方法。
一个生产者的内部资源一方面由自己循环引用适当的时机释放,另一方面也会由DisposeBase管理。