rac学习

一、bind操作,其实很简单就是做了一个信号,并且先执行当前信号的订阅,并且在当前订阅中调用订阅绑定参数的信号。假如生成的信号被订阅的时候,根据外联block生成一个信号的block,然后订阅当前的信号,并且把值传递给外联的生成信号的block生成对应的信号,这样外联的信号block就有了参数值,并且返回了对应的信号,这样的再次订阅这个信号,就可以得到处理后值的处理,然后sendnext给订阅者,最终订阅者接到了两个信号绑定的处理后的值。说白了就是让外联的block来帮助处理当前stream所发的值,得到的值发送给订阅者。

究其原因是bindblock这个函数,不如你bind的是一个signalofsignals那么这会返回一个信号,如果你单纯是一个signal,也会返回一个信号。而这个信号会被订阅到,所以就会出现降阶的现象。单纯的signal的值会被包装成一个信号,然后下面被订阅,并把值发送给订阅者。


盗图需要删的联系我

二、信号的订阅过程:

1. 创建一个信号其实就是创建一个RACDynamicSignal这个实现类的对象,在创建的时候create后面跟着的block存储起来,被叫做didsubscribe,这是信号的创建.

2. 当你订阅这个信号的时候,你subscribe:函数的参数就是一个RACSubscriber对象,这个对象封装了你的subscribeNext:的block参数,这个subcriber对象会被转化成RACPassthroughSubscriber这个类型的对象,这是在内部使用的subcriber对象,并且在在订阅的时候,会主动调用上面所说的didsubcribe block ,参数就是这个RACPassthroughSubscriber.

所以这样就形成一个闭环,信号生成的时候didsubcribe block创建,等待订阅的时候让信号去调用,调用的参数是一个subcriber.

三 、RACSubject是可以发送信号的,也可以订阅其他信号。

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

推荐阅读更多精彩内容

  • 前言 之前对RAC有了一个基本的认识,了解了它的作用,以及RAC的运行机制,我们知道只要是信号(RACSignal...
    大大盆子阅读 9,947评论 0 11
  • RAC支持的UI控件 RACCommand RACCommand类用于表示事件的执行,一般来说是在UI上的某些动作...
    花前月下阅读 7,775评论 0 5
  • 一、RAC是什么? 二、RAC有什么用? 三、引入RAC OC版本 四、详解 1、RACSignal:信号类 创建...
    Lucus_Linx阅读 4,278评论 0 0
  • RAC使用测试Demo下载:github.com/FuWees/WPRACTestDemo 1.ReactiveC...
    FuWees阅读 11,557评论 3 10
  • 最近,心神不宁,喜欢睡觉,沉迷于约翰尼德普,不想学习。我该拿什么拯救我自己。我不想动,我总空想着不劳而获,是的,我...
    H啵妞阅读 1,481评论 0 0

友情链接更多精彩内容