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()
}