来源:
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.pngScheduler:
1.用来做调度
2.代替GCD
3.处理异步和并发
网友评论