响应式编程概述
是一种编程范式、思想,无法从源码方式获得答案,是一种抽象能力
原始模式:
输入设备->计算设备->输出设备
常用模式:
业务需求->模式->代码
面向对象(Objective-C)与面向过程(C)都属于命令式编程
命令式运算:寄存器的运算,改变寄存器的值,不表示相互关系
响应式编程:类似excel表格计算,当求和中某一个元素值改变,结果随之改变。一个对象随着其他对象改变而改变(如autolayout)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//基于语句的运算,状态量的运算
- (NSInteger)factorial1:(NSInteger)x {
int result = 1;
for (int i = 1; i < x; i++) {
result *= i;
}
return result;
}
//没有创建变量,描述的是一种运算,表达式的运算,非状态量的运算
- (NSInteger)factorial2:(NSInteger)x {
if (x == 1) {
return 1;
}
return x * [self factorial2:(x - 1)];
}
函数响应式编程和ReactiveCocoa是什么
函数响应式编程
满足函数式的一些特性
面向离散事件流
离散事件流操作
特性:闭包&高阶函数
惰性计算
不改变状态
递归
ReactiveCocoa
FRP在Cocoa框架下的实现
富含了Cocoa框架多种组件
提供基于时间变化的数据流的组合和变换
理论基础
理解基于时间变化的数据流
数组对比流
流在时间变化,视频或音频
数组空间的有序,无法判断时间间隔
流的操作
对值的操作
对数量的操作
对维度的操作
对时间间隔的操作
基础知识-核心组件
RACSteam
子类由RACSequence和RACSingal组成
RACSequence(空间数据流,类似数组、链表)
Pull-driver:看书,看不看,看多少由我决定
Data
基于惰性计算,大规模计算时对性能要求高
RACSingal(时间数据流)
Push-driver:看电视,不论我看不看一直播放
Event
离散的,性能消耗较小
single Subscriber Disposable三者关系
Scheduler
调度
代替GCD
异步与并发