RAC(Reactivecocoa)之RACSignal流程及源
2018-08-31 本文已影响6人
留个念想给昨天
先来看RACSignal的代码
#RAC 流程分析
#1:创建信号 signal
//通过 RACSignal的子类RACDynamicSignal创建signal的同时,保存了didSubscribe{}代码块 等待_didSubscribe()执行
RACSignal* signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
#3:发送信号
[subscriber sendNext:@"发送信号"];
#4:销毁
return [RACDisposable disposableWithBlock:^{
NSLog(@"销毁了");
}];
}];
#2:订阅信号
// 通过signal 保存了nextBlock{} 并执行_didSubscribe()
[signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
第一步:RACSignal信号创建
RACSignal的 createSignal:内部创建
![](https://img.haomeiwen.com/i3807682/fc12f577acce5ee2.png)
注意创建的signal为
RACDynamicSignal
类型
第二步:signal 订阅信号
#2:订阅信号
// 通过signal 保存了nextBlock{} 并执行_didSubscribe()
[signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
![](https://img.haomeiwen.com/i3807682/fc83a36b59d6950a.png)
注意保存的subscriber 为RACSubscriber
,最后执行代码块didSubscribe时传入的参数为RACPassthroughSubscriber
类型
第三步:RACPassthroughSubscriber
发送信号
[subscriber sendNext:@"发送信号"];
![](https://img.haomeiwen.com/i3807682/4f41a0cf7f98ed14.png)
第四步:RACDisposable
销毁
# 4:销毁
return [RACDisposable disposableWithBlock:^{
NSLog(@"销毁了");
}];
总结
![](https://img.haomeiwen.com/i3807682/1b341813e1c5f22d.png)
写在最后:
希望这篇文章对您有帮助。当然如果您发现有可以优化的地方,希望您能慷慨的提出来。最后祝您工作愉快!