iOS Reactivecocoa(RAC)原理解析

一、关于常见类1、RACSiganl 信号类的使用如下图:完成一个信号的生命周期分为四步:1、创建信号 2、订阅信号 3、发送信号 4、取消订阅(图中未标明)下面每一步我们细细道来:1、创建信号由上面的 信号类使用图可知,创建信号类方法中传入了一个返回值是RACDisposable 类型,参数是遵守 RACSubscriber 协议的吧,名为 didSubscr...
摘要由CSDN通过智能技术生成

一、关于常见类

1、RACSiganl 信号类的使用

如下图:

信号类使用图

完成一个信号的生命周期分为四步:

  • 1、创建信号
  • 2、订阅信号
  • 3、发送信号
  • 4、取消订阅(图中未标明)

下面每一步我们细细道来:

1、创建信号

由上面的 信号类使用图可知,创建信号类方法中传入了一个返回值是RACDisposable 类型,参数是遵守 RACSubscriber 协议的吧,名为 didSubscribe 的block,具体实现如下:

由上图可知,内部创建的是一个 RACDynamicSignal 类型的信号,并将 didSubscribe 传入,内部实现如下:

这里就是重点了,首先先创建了一个 RACDynamicSignal 类型的信号,然后将传入的名为 didSubscribe 的block保存在创建的信号的 didSubscribe 属性中,此时仅仅是保存并未触发

一句话总结:创建信号本质就是创建了一个 RACDynamicSignal 类型的信号,并将传入的代码块保存起来,留待以后调用。

2、订阅信号

由上面的 信号类使用图可知,有三种订阅信号的方式,分别是订阅 Next 、Error 、 completed ,内部实现如下:

首先我们来看第一步,就是创建一个订阅者,并传入相应的block,创建实现如下:

很明显,创建订阅者的实质是,创建一个订阅者,并保存相应的block,比如 neterror、或者complete此时仅仅是保存并未触发!

由上面两图可知,三种订阅方式的流程模式是一致的,仅仅是保存的block不同而已,我们分析一种即可,so 接下来就以 subscribeNext 为例来逐步分析。

接下来,我们看看执行订阅命令这块的实现,如下:

这里,首先我们要知道此处代码实现是在 RACDynamicSignal 里,图中的 didSubscribe 就是第一步创建信号中保存的 didSubscribe block。

由上图可知第一步创建信号中保存的 didSubscribe 代码块在这里执行,并传入了刚刚生成的订阅者(此处的订阅者中保存里 Next block代码块)。

额外的,这里生成了一个 RACCompoundDisposable 类型的disposable,用来管理整个订阅结束及资源的清理,并以传入的订阅者、及当前信号、刚创建的disposable 生成一个 RACPassthroughSubscriber 类型的订阅者,此订阅者仅仅是将传入的三个对象整体包装了一下而已,实质起作用的还是在刚才创建的订阅者,所以,其包含的 next 代码块,依然直接调用即可。

之后,将执行 didSubscribe 代码块返回的 innerDisposable 传入刚刚生成disposable、并将执行此代码块的信号的 schedulingDisposable 也保存到RACCompoundDisposable 类型的disposable中,然后统一管理整个订阅结束及资源的清理。

其中的innerDisposable 就是 上面的 信号类使用图 中表示的第四步,其会在信号结束订阅的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值