ReactiveCocoa常见类-RACSiganl-信号
【ReactiveCocoa常见类-RACSiganl-信号】ViewController.m
#import "ViewController.h"#import "ReactiveCocoa.h"@interface ViewController ()
@property (nonatomic, strong) id subscriber;
//订阅者
@end@implementation ViewController- (void)viewDidLoad {
[super viewDidLoad];
// 核心:信号类
// 信号类作用:只要有数据改变,就会把数据包装成一个信号,传递出去。
// 只要有数据改变,就会有信号发出。
// 数据发出,并不是信号类发出。// 1.创建信号 createSignal:didSubscribe(block)
// RACDisposable:取消订阅
// RACSubscriber:发送数据// createSignal方法:
// 1.创建RACDynamicSignal // 动态
// 2.把didSubscribe保存到RACDynamicSignalRACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id subscriber) {
// block调用时刻:当信号被订阅的时候就会调用
// block作用:描述当前信号哪些数据需要发送
// _subscriber = subscriber;
// 发送数据
NSLog(@"调用了didSubscribe");
// 通常:传递数据出去
[subscriber sendNext:@1];
// 调用订阅者的nextBlock// 如果信号,想要被取消,就必须返回一个RACDisposable
return [RACDisposable disposableWithBlock:^{// 信号什么时候被取消:1.自动取消,当一个信号的订阅者被销毁的时候,就会自动取消订阅 2.主动取消
// block调用时刻:一旦一个信号,被取消订阅的时候就会调用
// block作用:当信号取消订阅,用于清空一些资源
NSLog(@"取消订阅");
}];
}];
// subscribeNext:
// 1.创建订阅者
// 2.把nextBlock保存到订阅者里面
// 订阅信号
// 只要订阅信号,就会返回一个取消订阅信号的类
RACDisposable *disposable = [siganl subscribeNext:^(id x) {// block:只要信号内部发送数据,就会调用这个block
NSLog(@"%@",x);
}];
// 取消订阅
// [disposable dispose];
// RACSignal使用步骤:
// 1.创建信号// 2.订阅信号// RACSignal底层实现:
// 1.当一个信号被订阅,创建订阅者,并且把nextBlock保存到订阅者里面
// 2.[RACDynamicSignal subscribe:RACSubscriber]
// 3.调用RACDynamicSignal的didSubscribe
// 4.[subscriber sendNext:@1];
// 5.拿到订阅者的nextBlock调用
}
@end//2016-08-14 22:08:18.056 ReactiveCocoa[35989:1720465] 调用了didSubscribe
//2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 1
//2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 取消订阅
推荐阅读
- 兼容并蓄广纳百川,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang复合容器类型的声明和使用EP04
- 分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03
- 泛型
- 邻居的另类求婚
- Java|Java RabbitMQ消息队列详解常见问题
- 投稿|这类SLG突然蹿红?战况如何?
- php手写一个pdo数据库操作类(附增删改查实例)
- 科股早知道|钛媒体科股早知道:最长交期达52周,汽车电动化和智能化推动这类芯片量价齐升;或成为巨头最畅销产品,市场份额将在8-9月迎来新高
- 嵌入式软硬件|嵌入式软件组件经典架构与存储器分类
- Java通过自定义类加载器实现类隔离