初识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 <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的底层实现原理已经十分清楚了。希望对大家有所帮助。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容