信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据们就会马上发出数据。
- 信号类,只是表示当前数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者发出。
- 默认一个信号是冷信号 ,也就是值改变了,也不会触发,只有订阅了这个信号,才会变为热信号值改变了才会触发。
- 如何订阅信号:调用信号RACSignal 的
subscribeNext
方法就可以订阅。
RACSignal 简单使用
- (void)viewDidLoad {
[super viewDidLoad];
//RACSignal 底层实现
/*
// RACSignal底层实现:
// 1.创建信号,首先把didSubscribe保存到信号中,还不会触发。
// 2.当信号被订阅,也就是调用signal的subscribeNext:nextBlock
// 2.2 subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中。
// 2.1 subscribeNext内部会调用siganl的didSubscribe
// 3.siganl的didSubscribe中调用[subscriber sendNext:@1];
// 3.1 sendNext底层其实就是执行subscriber的nextBlock
*/
//RACSignal 使用步骤:
// 创建信号
RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
// block 时刻被调用 : 每当有订阅者订阅信号,就会调用信号
// 发送数据
[subscriber sendNext:@1];
// 如果不在发送数据 ,最好发送信号完成 ,内部会自动调用 [RACDisposable disposable] 取消订阅信号
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
// block 调用时刻 :当信号 发送完成或者发送错误,就会自动执行这个block 取消订阅信号
// 执行完block 当前信号就不会在被订阅了
// 执行完 后 信号就会被销毁 再次发送数据也不会被调用了
}];
}];
// 订阅信号
// 不订阅信 ,信号一直处于冷信号状态 只有订阅后 信号处于被激活状态
[signal subscribeNext:^(id _Nullable x) {
// 每当 有信号发送数据 这个block 就会被调用
NSLog(@"%@",x);
}];
}
-
RACSubscriber :表示订阅者的意思 ,用于发送信号,这是一个协议,不是一个类,只用遵守这个协议,并且实现方法才能成为订阅者,通过create 创建信号。
-
RACDisposable 用于取消信号或者清理资源
- 使用场景:不惜那个监听某个信号,可以主动取消订阅信号
网友评论