//
// ViewController.m
// LearnRAC-01
//
// Created by maochengfang on 2021/7/3.
//
#import "ViewController.h"
#import "ReactiveObjC.h"
@interface ViewController ()
@property (nonatomic, strong) RACDisposable *subscriber;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
/*
1.创建信号
disSubScriber调用:只要一个信号被订阅就调用
disSubScriber作用:利用subscriber来发送数据
disSubScriber能否执行 取决于信号是否被订阅
*/
/*
RACDisposable 它是帮助我们取消订阅
什么时候需要取消订阅
1.信号已发送完毕
2.信号发送失败
*/
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
NSLog(@"block被执行");
[subscriber sendNext:@"Hello Oliver"];
self->_subscriber = subscriber;
return [RACDisposable disposableWithBlock:^{
NSLog(@"订阅被取消");
}];
}];
//2.订阅信号(热信号)
/*
nextBlock调用:只要订阅发送数据,信号就会被调用
nextBlock作用:处理数据,展示UI
nextBlock是否额比调用,取决于订阅着是否发送了信号
*/
RACDisposable *disposable = [signal subscribeNext:^(id _Nullable x) {
NSLog(@"订阅信号--%@",x);
}];
/*
默认一个信号发送数据完毕之后就会主动取消订阅
只要订阅着还在,就不会自动取消订阅
手动取消
*/
[disposable dispose];
}
@end
2021-07-03 10:53:03.441066+0800 LearnRAC-01[1394:32664] block被执行
2021-07-03 10:53:03.441326+0800 LearnRAC-01[1394:32664] 订阅信号--Hello Oliver
2021-07-03 10:53:03.441448+0800 LearnRAC-01[1394:32664] 订阅被取消