一、RAC基础知识及使用
1.继承关系

2.基本使用
- 创建一个基本信号
// ^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber)
// 回调block:返回值为 RACDisposable 类型,传入参数为subscriber(遵循RACSubscriber协议)
//===》原方法声明如下
// + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe {
// sendCompleted 告诉订阅者该信号此次数据发送完毕(以此来执行下一个订阅的信号)
//创建一个基本的信号
RACSignal *racignl = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[subscriber sendNext:@"map1"];
[subscriber sendNext:@"map2"];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{//信号disposable则会被调用
;
}];
}];
//简单的信号订阅以及取消订阅
RACDisposable *disposable = [racignl subscribeNext:^(id _Nullable x) {//信号每被subscribeNext一次 createSignal:后的block都会被执行一次,即值会全部再发送一遍
NSLog(@"%@", x);
}];
[disposable dispose];//取消订阅
做了什么?
RACSignal
调用createSignal
方法
=>
RACDynamicSignal
调用createSignal
方法
=>
创建RACDynamicSignal
对象,并持有subscriber
这个block
- 信号订阅
后面要做什么?(既然持有了这个block,那么这个block什么时候调用呢 ?)
[racignl subscribeNext:^(id _Nullable x) {
;//code
} error:^(NSError * _Nullable error) {
;//code
} completed:^{
;//code
}];
RACSignal
调用subscribeNext
=>
RACSubscriber
调用subscriberWithNext
=>
创建RACSubscriber
对象,并持有传入的所有block
再调用RACDynamicSignal
的subscribe
方法,传入的参数是创建的RACSubscriber
对象
RACDynamicSignal
的subscribe
方法做了什么
创建RACCompoundDisposable
和RACPassthroughSubscriber
对象
注:RACPassthroughSubscriber
:持有RACSignal
,RACSubscriber
,RACCompoundDisposable
RACCompoundDisposable
:订阅的销毁对象
这两个对象创建完成后
if (self.didSubscribe != NULL) {
RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{
RACDisposable *innerDisposable = self.didSubscribe(subscriber);
[disposable addDisposable:innerDisposable];
}];
[disposable addDisposable:schedulingDisposable];
}
self.didSubscribe(subscriber);
则调用了subscriber
这个block
[subscriber sendNext:@"map1"];
[subscriber sendNext:@"map2"];
[subscriber sendCompleted];
至此就是信号创建到订阅的大概过程
参考:https://www.jianshu.com/p/d7d951a99db8
网友评论