iOS AFNetwork 3.0:是否有更快的方法发送多个API请求并等待所有请求完成?

iOS AFNetwork 3.0:是否有更快的方法发送多个API请求并等待所有请求完成?,ios,objective-c,httprequest,afnetworking-3,Ios,Objective C,Httprequest,Afnetworking 3,我目前正在使用以下方法发送GETAPI请求。这个方法有效,但我想知道是否有更快的方法。关于需求,我只需要知道所有已删除的邮件何时已同步。任何提示或建议都将不胜感激 - (void)syncDeletedMail:(NSArray *)array atIdx:(NSInteger)idx { if (idx < array.count) { NSInteger idNumber = array[idx]; [apiClient deleteMail:

我目前正在使用以下方法发送
GET
API请求。这个方法有效,但我想知道是否有更快的方法。关于需求,我只需要知道所有已删除的邮件何时已同步。任何提示或建议都将不胜感激

- (void)syncDeletedMail:(NSArray *)array atIdx:(NSInteger)idx {
    if (idx < array.count) {
        NSInteger idNumber = array[idx];

        [apiClient deleteMail:idNumber onSuccess:^(id result) {
            [self syncDeletedMail:array atIdx:(idx + 1)];
        } onFailure:^(NSError *error){
            [self syncDeletedMail:array atIdx:(idx + 1)];
        }];
    } else {
       NSLog(@"finished");
    }
}
-(void)syncDeletedMail:(NSArray*)数组atIdx:(NSInteger)idx{
if(idx

编辑:我不在乎它完成的顺序(不确定它在速度方面是否重要),只要所有API请求都完成。

您可以立即发送
deleteMail
请求,并使用
dispatch\u group
知道所有请求何时完成。以下是实施情况

- (void)syncDeletedMail:(NSArray *)array {

    dispatch_group_t serviceGroup = dispatch_group_create();

    for (NSInteger* idNumber in array)
    {
        dispatch_group_enter(serviceGroup);
        [apiClient deleteMail:idNumber onSuccess:^(id result) {
            dispatch_group_leave(serviceGroup);
        } onFailure:^(NSError *error){
            dispatch_group_leave(serviceGroup);
        }];
    }

    dispatch_group_notify(serviceGroup,dispatch_get_main_queue(),^{
       NSLog(@"All email are deleted!"); 
    });
}

在这里,您可以看到所有请求都是同时启动的,因此它将把时间从
n
倍减少到
1

我想您的请求是因为您可能有大量排队的删除请求,而不仅仅是五到十个。 在这种情况下,我也会尝试添加一个服务器端API调用,它允许您每次删除一个以上的项目,可能高达十或二十,这样您还可以减少生成的网络流量的开销。(一个GET不只是发送您要删除的项目的id,还包括一组数据,这些数据基本上会在每次通话中反复发送)将邮件分批分组。

Swift版本的@Kamran:
let group = DispatchGroup()
for model in self.cellModels {

    group.enter()

    HTTPAPI.call() { (result) in
        
        // DO YOUR CHANGE
        switch result {
           ...
        }
        group.leave()
    }
}
group.notify(queue: DispatchQueue.main) {
     // UPDATE UI or RELOAD TABLE VIEW etc.
     // self.tableView.reloadData()
}