基础部分

iOS 多个网络请求并发执行的解决方案

2017-07-13  本文已影响741人  VincentHK

在项目中往往会遇到这种需求:UI 的更新要在2~3个网络请求后才执行.这里提供两种执行方案.
一.利用 GCD
通过 gcd_group可以解决这个问题.具体做法如下

//
// ViewController.m
// tableview
//
// Created by myMac on 16/12/26.
// Copyright © 2016年 myMac. All rights reserved.
//

import "ViewController.h"

typedef void(^FinishNetwork)();

@interface ViewController ()

@property (nonatomic, copy ) FinishNetwork block;
@property (nonatomic, copy ) NSString *string1;
@property (nonatomic, copy ) NSString *string2;
@property (nonatomic, copy ) NSString *string3;

@end

@implementation ViewController

}

}

}

}

@end

20161229132112431.png

二.通过 RAC
利用 RAC 的 merge 也可以解决这个问题,具体做法如下
ViewController

[[RACSignal merge:@[[TestViewModel fetchList1], [TestViewModel fetchList2]]] subscribeNext:^(id x) {

    NSLog(@"%@", x);
    if (!_string1.length) {
        self.string1 = x;
    } else {
        self.string2 = x;
    }
    
} completed:^{
    NSLog(@"string1: %@\nstring2: %@ \n", _string1, _string2);
}];

ViewModel

import "TestViewModel.h"

@implementation TestViewModel

}

}
@end

20161229143724794.png

另外,通过下面的方法也可以实现
<span style="font-size:18px;">/// Like -rac_liftSelector:withSignals:, but accepts an array instead of
/// a variadic list of arguments.

具体实现代码
[self rac_liftSelector:@selector(responseA:B:) withSignalsFromArray:@[[TestViewModel fetchList1], [TestViewModel fetchList2]]];

20161229144215293.png
上一篇下一篇

猜你喜欢

热点阅读