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是可以发送信号的,也可以订阅其他信号。