ReactiveCocoa(简称RAC),结合了函数式编程和响应式编程的编程风格,所以ReativeCocoa被描述为函数响应式编程(FRP)框架,使用时不需要考虑调用顺序,直接考虑结果,高内聚。
使用时如果用Cocoapods导入需要在podfile加上use_frameworks,重新pod install才能导入成功。
在RAC中最核心的类是RACSignal,这是一个信号类,表示将来有数据传递,只要有数据改变,信号内部接受数据,就会立马发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出,默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发,用RACSignal的subscribeNext就能订阅。
RACSignal简单使用
RACSignal使用步骤
1.创建信号
+ (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe
2.订阅信号,才会激活信号
- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
3.发送信号
- (void)sendNext:(id)value
例:
-(void)signal{
//1.创建信号
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber){
//保存起来 就不会被取消订阅
_subscriber = subscriber;
//发送信号
[subscriber sendNext:@1];
retuen [RACDisposable disposableWithBlock:^{
NSLog(@"默认信号发送完毕被取消");
}];
}];
//如果要取消就拿到RACDisposable
//2.订阅信号
RACDisposable *disposable = [signal subscribeNext:^(id x){
NSLog(@"%@",x);
}];
//取消订阅
[disposable dispose];
}
运行结果如下:
*RACSubscriber:表示订阅者的意思,用于发送信号,这是一个协议,不是一个类,只要遵守这个协议,变企鹅实现方法就能成为订阅者,通过create创建的信号,都有一个订阅者,帮助他发送数据。
*RACDisposable:用于取消订阅或者清理资源,当信号发送完成或者发送错误的时候就会自动触发它。(不想监听某个信号时,可以通过它主动取消订阅信号。)
*RACSubject:信号提供者,自己可以充当信号,又能发送信号。(通常用来代替代理)。
*RACReplaySubject:重复提供信号类,RACSubject的子类。
RACReplaySubject与RACSubject区别:
RACReplaySubject可以先发送信号,再订阅信号,RACSubject就不可以。(1.如果一个信号每被订阅一次,就需要把之前的值重复发送一遍,使用重复提供信号类。2.可以设置capacity数量来限制缓存的value数量,即只缓冲最新的几个值。)