美文网首页
iOS RAC学习之路(一)

iOS RAC学习之路(一)

作者: 大大盆子 | 来源:发表于2017-06-27 17:35 被阅读291次

    什么是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(订阅回调)里面监听到发送的内容。

    相关文章

      网友评论

          本文标题:iOS RAC学习之路(一)

          本文链接:https://www.haomeiwen.com/subject/axsbtxtx.html