美文网首页
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