RAC初识

作者: 锦鲤跃龙 | 来源:发表于2017-12-19 17:21 被阅读0次

简介

简单的说,RAC就是一个第三方库,他可以大大简化你的代码过程。

官方的说,ReactiveCocoa(其简称为RAC)是由GitHub开源的一个应用于iOS和OS X开发的新框架。RAC具有函数式编程和响应式编程的特性。
RAC在某些特定情况下开发时可以大大简化代码,并且目前来看安全可靠。

RAC常见的类

RACSignal:信号类


   //1.创建信号
   /*
    didSubScriber调用:只要一个信号被订阅就调用!
    didSubScriber作用:利用subscriber 来发送数据!
    didSubScriber能否执行,取决于信号是否被订阅
    */
   RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
      
       NSLog(@"Block被执行!");
       
       //3.发送信号
       [subscriber sendNext:@"Hello,LIYANJUN!"];
       
       return nil;
       
   }];
  
   
   //2.订阅信号(热信号)
   /*
    nextBlock调用:只要订阅者发送数据、信号就会被调用
    nextBlock作用:处理数据、展示UI
    nextBlock是否被调用,取决于订阅者是否发送了信号
    */
   [signal subscribeNext:^(id x) {
       //x:信号发送的内容
       
       NSLog(@"%@",x);
       
   }];

执行过程

查看源码可以知道其执行过程如下


WX20171218-221342@2x.png

RACDisposable:它是帮助我们取消订阅!

什么时候取消订阅

  1. 信号发送完毕;
  2. 信号发送失败;
1. 默认一个信号发送完毕后,就会主动取消订阅
2. 只有订阅者存在,就不会取消订阅 
3. 可以手动取消订阅
   RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
       
        NSLog(@"Block被执行!");
        
        //3.发送信号
        [subscriber sendNext:@"Hello,LYJ!"];
        self.subScriber = subscriber;//强引用,防止block执行完毕后释放,执行取消
        
        
        return [RACDisposable disposableWithBlock:^{
            
            //只有信号取消订阅,就会执行这里
            NSLog(@"订阅被取消!");
        }];
        
    }];
   
   
   RACDisposable *disposable =  [signal subscribeNext:^(id x) {
        //x:信号发送的内容
        
        NSLog(@"%@",x);
        
    }];
    
    [disposable dispose];
    

RACSubject:信号提供者:自己可以充当信号,又能发送信号

//1.创建信号
    RACSubject *subject = [RACSubject subject];
    
    //2.订阅信号
    //不同的信号,订阅方式不一样(因为类型不一样,所以调用方法不一样)
    //RACSubject 处理订阅:拿到之前的_subScribers数组,保存订阅者
    [subject subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"程序员“不高兴”同学,接收到祝福:%@",x);
    }];

    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"程序员“xXuTeng”同学,接收到祝福:%@",x);
    }];
    
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"程序员“随遇而安”同学,接收到祝福:%@",x);
    }];
    
    //3.发送数据
    //遍历出所有的数据,调用nextBlock
    [subject sendNext:@"1024 程序员节快乐!身体健康!万事如意~~~~~"];

信息流

WX20171219-165846@2x.png

RACReplaySubject

他是RACSubject的子类,RACReplaySubject可以先发送信号,再订阅信号;RACSubject就不可以。

//1.创建信号
    RACReplaySubject *subject = [RACReplaySubject subject];
    
    //3.发送信号
    [subject sendNext:@"Hello"];
    
    
    
    //2.订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"%@",x);
        
    }];
    
    //2.订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"12312314%@",x);
        
    }];

他为什么可以提前发送信号,下图可以很好的解释。
在发送信号的时候,她会把数据保存一份,然后订阅信号的时候,她会遍历valuesReceived,只要有发送者,就发送数据

WX20171220-152836@2x.png

相关文章

  • RAC初识

    RAC: ReactiveCocoa 主要是由以下四大核心组件: RACStream :信号源 RAC...

  • 初识RAC

    RAC - ReactiveCocoa, 是github上的一套开源框架, 是一套函数响应式编程框架. 那么这套框...

  • RAC初识

    简介 简单的说,RAC就是一个第三方库,他可以大大简化你的代码过程。 官方的说,ReactiveCocoa(其简称...

  • 初识 RAC

    一.RAC 是什么?能做什么? 1.RAC是Reactive Cocoa的简称,是一种支持函数式响应式编程的框架,...

  • ReactiveCocoa--初识RAC

    RAC是什么?RAC — ReactiveCocoa(RAC) Github 一个开源框架!!RAC — 函数响...

  • ReactiveCocoa 相关理论和实践

    RAC 初识https://gold.xitu.io/post/5829f4c3570c350063c436ach...

  • 初识RACSignal、RACDisposable及RACSig

    RAC是什么? RAC — ReactiveCocoa(RAC) Github 一个开源框架!! RAC — 函数...

  • 学习RAC小记-适合给新手看的RAC用法总结

    RAC是什么? RAC — ReactiveCocoa(RAC) Github 一个开源框架!! RAC — 函数...

  • RAC-ReactiveCocoa总结(一)

    RAC是什么? RAC — ReactiveCocoa(RAC) Github 一个开源框架!! RAC具有函数...

  • Oracle RAC与DG

    RAC RAC: real application clustersrac RAC: real applicati...

网友评论

      本文标题:RAC初识

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