初识RACSignal、RACDisposable及RACSig
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 <ReactiveObjC.h>,当然可以定义一个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的底层实现原理已经十分清楚了。希望对大家有所帮助。