ReactiveCocoa源码解读(二)

上一篇解读了ReactiveCocoa的三个重要的类的底层实现,本篇继续。

一、RACMulticastConnection

1.应用

RACMulticastConnection: 用于当一个信号被多次订阅时,为了保证创建信号时,避免多次调用创建信号的block造成副作用,可以使用该类处理,保证创建信号的block执行一次。

2.源码实现

  • 底层原理

  • 创建信号

+ (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe

  • 创建连接

[signal publish]

  • 订阅信号
    (RACDisposable *)subscribeNext:(void (^ )(id x))nextBlock;

  • 连接信号

[connect connect];

3.流程图

RACMulticastConnection

4.总结

RACMulticastConnection利用RACSubject实现了创建信号的block只执行一次的功能。对于需要对此订阅信号,但是不希望多次创建信号的应用场合,可以RACMulticastConnection解决。

二、RACCommand

1.应用

RACCommand类用来表示动作的执行, 是对动作触发后的连锁事件的封装。常用在封装网络请求,按钮点击等等场合。

2.源码实现

RACCommand底层实现

  • 创建command

- (id)initWithSignalBlock:(RACSignal * (^)(id input))signalBlock

  • 执行command

- (RACSignal *)execute:(id)input

  • 订阅command
    - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock

3.流程图

RACCommand

4.总结

RACCommand用来封装事件时,还可以订阅信号(executionSignals)、订阅最新信号(switchToLatest)、跳过几次信号(skip)或信号是否正在执行(executing),在执行信号时,还可以监听错误信号和完成信号,请参考demo例子。


ReactiveCocoa框架的源码分析暂告一段落,如有分析不足之处,欢迎互相交流。

Demo地址:

RACDemo

感觉不错,打个赏?
微信                                 支付宝
pay_weixin            pay_zhifubao
金额随意 快来“”我呀~
联系方式:kelvin@fishbay.cn

发表评论

电子邮件地址不会被公开。 必填项已用*标注