初识RACSignal、RACDisposable及RACSignal底层实现

RAC是什么?

RAC — ReactiveCocoa(RAC)  Github 一个开源框架!!

RAC — 函数响应编程框架!!

RAC有什么用?

帮助我们更简单霸气的处理事件!!

这里我们导入的是OC版本:pod 'ReactiveObjC','~>3.0.0'


RACSignal :信号类!

通过RACSignal创建一个信号!! (默认是: 冷信号!!)

通过订阅者!订阅这个信号!(变成: 热信号!!)

发送信号!!

RACDisposable:

它可以帮助我们取消订阅. 默认一个信号发送数据完毕就会主动取消订阅.


会不定期更新,喜欢的小伙伴多多关注噢

开始撸代码

1、新建Xcode工程,导入pod 'ReactiveObjC','~>3.0.0'

2、在需要地方导入#import ,当然可以定义一个pch文件导进去

3、具体代码看截图



代码解析:

截图中第41行代码有一个RACDisposable类型返回值,RACDisposable主要用于取消订阅;每当一个信号发送数据完毕就会主动取消订阅;但是我们有时候发送完数据后不想要取消订阅,就定义一个属性(截图第18行)强引用subscriber,这样发送信号之后就不会默认取消订阅,我们就可以手动取消订阅了。



RACSignal底层实现


1、截图第30行创建信号类,是一个RACDynamicSignal(RACSignal的子类)类型的信号类,在创建方法中,将传入的block存储起来(signal->_didSubscribe = [didSubscribe copy])

2、订阅信号时候,内部首先创建订阅者RACSubscriber(就是下面截图中的o),同时订阅者RACSubscriber将传入的next进行保存;注意 return [self subscribe:o]中的self是RACDynamicSignal类型,进入[self subscribe:o],可以看到执行了didSubscribe,这个didSubscribe就是我们创建信号时候传入的block,就是第一张截图中的subscribe。


3、执行didSubscribe,就是第一张截图第32行,点击进去发现执行的是nextBlock(value),发现没有 self.next 中的 next 就是我们第二步订阅者RACSubscriber保存的next,也就是实现next。



至此,RACSignal的底层实现原理已经十分清楚了。希望对大家有所帮助。

你可能感兴趣的:(初识RACSignal、RACDisposable及RACSignal底层实现)