iOS RAC学习之路(一)

96
大大盆子
0.2 2017.06.27 17:35* 字数 436

什么是RAC?

RAC是ReactiveCocoa的简称,是Github开源的一个应用于iOS和OS开发的第三方框架,具有函数式编程跟响应式编程的特性,也可称其为函数响应式编程。

RAC的作用

  • 要了解它的作用,先要了解响应式编程:在事件发生的时候立刻做出响应,比如a=b+c,当b或者c发生变化的时候,a的值能够立刻改变,类似于蝴蝶效应。一般来说,实现这种逻辑需要用到KVO去监听b跟c,然后去重新计算a,而使用RAC就不用去管中间的过程而直接去响应事件。
  • 很方便的处理开发中常用的事件,比如Target-Action,delegate,KVO,Notification等等,它把监听事件跟处理事件的代码放到一起,无需跳到对应的方法中,代码简洁且利于管理。

运行机制

总的来说,RAC是围绕signal(信号)来运行的,基本流程就是信号三部曲:

  • 创建/获取信号(冷信号)
  • 订阅信号 (热信号)
  • 发送信号
//1.创建信号,点进去可以看到:
//  它其实创建了一个RACDynamicSignal信号,并保存了didSubscribe这个Block
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
    NSLog(@"创建了信号");
    
    //3.发送信号,点进去可以看到
    //  执行之前所保存的nextBlock
    [subscriber sendNext:@"ZM"];
    NSLog(@"发送了信号");
    
    return [RACDisposable disposableWithBlock:^{
        //取消订阅时的回调
    }];
}];

//2.订阅信号,点进去可以看到:
//  创建了一个RACSubscriber订阅者,并保存了一个nextBlock,
//  同时执行之前所保存的didSubscribe这个Block
[signal subscribeNext:^(id  _Nullable x) {
    NSLog(@"订阅了信号");
    NSLog(@"%@",x);
    
}];

打印结果

这边贴上一张图来更好的帮助我们理解其中的实现原理
信号三部曲

首先在创建信号的时候,带进去一个已经订阅的Block(didSubscribe),把它保存在信号中,并没有执行;

在订阅信号的时候,带进去一个发送信号的Block(nextBlock),然后创建一个订阅者(RACSubscriber对象),订阅者会把nextBlock进行保存,接着执行之前信号保存的didSubscribe这个Block,并将订阅者传递过去;

然后在didSubscribe回调里面,由订阅者发送信号,也就是执行之前保存的nextBlock;

最后在nextBlock(订阅回调)里面监听到发送的内容。

日记本