首先利用 cocoapods 将RectiveCocoa集成到项目中去。
ReactiveCocoa是函数响应式编程!
响应式编程思想:一种面向数据流和变化传播的编程范式。
代表:KVO
函数式编程思想:把操作尽量写成一系列的嵌套函数或着方法调用。
函数式特点:每个方法必须有返回值(对象本身),把函数或者block当作参数,block参数(需要操作的值),block返回值(操作结果);
代表:ReactiveCocoa
链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性更好。例如massory 中的添加约束:make.left.right.top.bottom.equalTo(10) 便是链式编程思想;
导入#import<ReactiveCocoa/ReactiveCocoa.h>头文件
1. RACSignal信号类 以及 RACDisposable
//RACSignal:信号类,当我们有数据产生,创建一个信号!
//1.创建信号(冷信号!)
//didSubscribe调用:只要一个信号被订阅就会调用!!
//didSubscribe作用:利用subscriber发送数据!!
RACSignal * signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {
//3.发送数据subscriber它来发送
[subscriber sendNext:@"呵呵哈哈嘿嘿"];
return [RACDisposabledisposableWithBlock:^{
//只要信号取消订阅就会来这里
//清空资源!!
NSLog(@"哥么来了!!");
}];
}];
//2.订阅信号(热信号!!)
//nextBlock调用:只要订阅者发送数据就会调用!
//nextBlock作用:处理数据,展示UI界面!
RACDisposable* disposable = [signal subscribeNext:^(idx) {
//x:信号发送的内容!!
NSLog(@"%@",x);
}];
//默认一个信号发送数据完毕就会主动取消订阅
//只要订阅者在(即将订阅者强引用,在函数结束的时候订阅者也不会被释放),就不会自动取消订阅
//手动取消订阅
[disposable dispose];
2.RACSubject
//1.创建信号
RACSubject* subject = [RACSubject subject];
//2.订阅信号
//不同的信号订阅的方式不一样!!(因为类型不一样,所以调用的方法不一样)
//RACSubject处理订阅:拿到之前的_subscribers保存订阅者
[subjectsubscribeNext:^(idx) {
NSLog(@"接受到了数据:%@",x);
}];
//3.发送数据
//遍历出所有的订阅者,调用nextBlock
[subjectsendNext:@"汉堡包"];
网友评论