一、关于常见类
1、RACSiganl 信号类的使用
如下图:
完成一个信号的生命周期分为四步:
- 1、创建信号
- 2、订阅信号
- 3、发送信号
- 4、取消订阅(图中未标明)
下面每一步我们细细道来:
1、创建信号
由上面的 信号类使用图
可知,创建信号类方法中传入了一个返回值是RACDisposable
类型,参数是遵守 RACSubscriber
协议的吧,名为 didSubscribe
的block,具体实现如下:
由上图可知,内部创建的是一个 RACDynamicSignal
类型的信号,并将 didSubscribe
传入,内部实现如下:
这里就是重点了,首先先创建了一个 RACDynamicSignal
类型的信号,然后将传入的名为 didSubscribe
的block保存在创建的信号的 didSubscribe
属性中,此时仅仅是保存并未触发。
一句话总结:创建信号本质就是创建了一个 RACDynamicSignal
类型的信号,并将传入的代码块保存起来,留待以后调用。
2、订阅信号
由上面的 信号类使用图
可知,有三种订阅信号的方式,分别是订阅 Next
、Error
、 completed
,内部实现如下:
首先我们来看第一步,就是创建一个订阅者,并传入相应的block,创建实现如下:
很明显,创建订阅者的实质是,创建一个订阅者,并保存相应的block,比如 net
、error
、或者complete
,此时仅仅是保存并未触发!
由上面两图可知,三种订阅方式的流程模式是一致的,仅仅是保存的block不同而已,我们分析一种即可,so 接下来就以 subscribeNext
为例来逐步分析。
接下来,我们看看执行订阅命令这块的实现,如下:
这里,首先我们要知道此处代码实现是在 RACDynamicSignal
里,图中的 didSubscribe
就是第一步创建信号中保存的 didSubscribe
block。
由上图可知第一步创建信号中保存的 didSubscribe
代码块在这里执行,并传入了刚刚生成的订阅者(此处的订阅者中保存里 Next
block代码块)。
额外的,这里生成了一个 RACCompoundDisposable
类型的disposable,用来管理整个订阅结束及资源的清理,并以传入的订阅者、及当前信号、刚创建的disposable 生成一个 RACPassthroughSubscriber
类型的订阅者,此订阅者仅仅是将传入的三个对象整体包装了一下而已,实质起作用的还是在刚才创建的订阅者,所以,其包含的 next
代码块,依然直接调用即可。
之后,将执行 didSubscribe
代码块返回的 innerDisposable 传入刚刚生成disposable、并将执行此代码块的信号的 schedulingDisposable 也保存到RACCompoundDisposable
类型的disposable中,然后统一管理整个订阅结束及资源的清理。
其中的innerDisposable 就是 上面的 信号类使用图
中表示的第四步,其会在信号结束订阅的