美文网首页
2.ReactiveCocoa的基础概述和理解

2.ReactiveCocoa的基础概述和理解

作者: 凯司机 | 来源:发表于2021-04-14 11:06 被阅读0次

    来源:

    ReactiveCocoa这个东西是GitHub Mac客户端的副产物:原本是推广客户端用的,客户端没多牛X,但是这个框架很厉害。

    他实质上是FRP在Cocoa框架下的实现、包含多个Cocoa框架组件、提供基于时间变化的数据流的组合和变换——简称RAC。

    RAC适合异步场景,不适合非异步场景。非异步场景硬套用,性能不好。大部分问题是出在异步情景下。

    不建议的做法:

    RAC中大量套用OP性能会比较慢,问题会比较多。

    一些我们在入门前需要了解的理论基础:

    1.如何理解基于时间变化的数据流?
    数组空间的连续性:数组可以是多维的,


    image.png

    流在空间和时间上都不是连续的:流是可以多阶的,


    image.png

    基于时间变化的数据流的可操作范围:

    包括:1.对值的操作、2.对数量的操作、3.对维度操作、4.对时间间隔操作。


    image.png

    基于时间变化的数据流的可操作范围:

    核心组件:
    1.RACSteam、RACSequence、RACSignal
    2.RACSubscriber
    3.RACDisposable
    4.RACScheduler
    5.Cocoa框架适配工具

    RACSteam的两个子类

    RACSteam——>1.RACSequence、2.RACSignal

    sequence VS signal

    1.Pull-driver vs push-driver
    2.Data vs Event
    3.其他差异:sequence基于时间连续(Data)、signal是时间离散

    RACSequence的使用示例:

    - (void)sequence {  
      RACSequence *sequence1 = [RACSequence return:@1];  
      RACSequence *sequence2 = [RACSequence sequenceWithHeadBlock:^id{   
        return @2;  
      } tailBlock:^RACSequence *{  
        return sequence1; 
      }];  
      RACSequence *sequence3 = @[@1, @2, @3].rac_sequence;  
      RACSequence *mappedSequence = [sequence1 map:^id(NSNumber *value) {    
        return @(value.integerValue * 3); 
      }]; 
      RACSequence *concatedSequence = [sequence2 concat:mappedSequence];  
      // 21、12、33——按照最少的个数一一对应,连续组合最少个数的元组。
      RACSequence *mergedSequence = [RACSequence zip:@[concatedSequence, sequence3]];    
      NSLog(@"head is %@", mergedSequence);  
      for (id value in mergedSequence) {   
        NSLog(@"value is %@",value);  
      } 
    }
    

    计算结果:

     2021-04-13 21:05:45.172631+0800 xxxxxx[2966:865139] value is <RACTuple: 0x17000e070>
    ( 2,  1)
    
    2021-04-13 21:05:45.172693+0800 xxxxxx[2966:865139] value is <RACTuple: 0x17000e0e0>
    ( 1,  2)
    
    2021-04-13 21:05:45.172721+0800 xxxxxx[2966:865139] value is <RACTuple: 0x17000e140>
    ( 3,  3)
    

    信号、信号持有者、订阅开关:

    image.png

    Scheduler:

    1.用来做调度
    2.代替GCD
    3.处理异步和并发

    相关文章

      网友评论

          本文标题:2.ReactiveCocoa的基础概述和理解

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