文章系列
《RACSignal 》
《RACDisposable》
《RACSubject、RACReplaySubject》
《iOS RAC - 基本用法》
《iOS RAC - 定时器》
《iOS RAC - RACMulticastConnection》
《iOS RAC - RACCommand》
《iOS RAC - 核心方法bind》
《iOS RAC - 集合RACTuple、RACSequence》
《iOS RAC - rac_leftSelector》
《iOS RAC - 映射》
《iOS RAC - 过滤》
《iOS RAC - 登录页面,MVVM》
在线程里面一定有一个这样子的例子:同时下载三张图片,三张图片都下载完了,在显示到UI上面。那个时候是使用group,现在来看看RAC是如何做的。
1、先创建三个信号
RACSignal * signal1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[subscriber sendNext:@"我是图片1"];
return nil;
}];
RACSignal * signal2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[subscriber sendNext:@"我是图片2"];
return nil;
}];
RACSignal * signal3 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[subscriber sendNext:@"我是图片3"];
return nil;
}];
2、然后就是今天的主角了
self rac_liftSelector:<#(nonnull SEL)#> withSignalsFromArray:<#(nonnull NSArray *)#>
[self rac_liftSelector:@selector(updateUI) withSignalsFromArray:@[signal1,signal2,signal3]];
- (void)updateUI{
}
然后就开开心心运行去……
嗯哼~~~~~ 结果当然是奔溃啦
其实他的意思就是,你的三张图片都不给UI,UI怎么更新啊???
所以我们只需要这样子改改
[self rac_liftSelector:@selector(updateUIPic:pic2:pic3:) withSignalsFromArray:@[signal1,signal2,signal3]];
- (void)updateUIPic:(id)pic1 pic2:(id)pic2 pic3:(id)pic3{
NSLog(@"我要加载了 : pic1 - %@ pic2 - %@ pic3 - %@",pic1,pic2,pic3);
}
主要应用的场景就是,一个页面如果有多个请求,然后又要等到数据全部请求到,在刷新的时候,或者类似于这样子的场景就可以使用。
需要注意的是,block在主线程,如果有耗时操作,最好还是放在子线程运行。