Ios 多个异步方法,一个完成处理程序
我有两种异步方法:Ios 多个异步方法,一个完成处理程序,ios,completion,Ios,Completion,我有两种异步方法: - (void)login: (void (^)(BOOL))completion{ // some network stuff with completion } 及 对于后台获取,我需要两个方法都完成,并且只返回一个完成 当然,我可以嵌套这些方法 - (void)login: (void (^)(BOOL))completion{ //.... [self download:^(BOOL success) { /
- (void)login: (void (^)(BOOL))completion{
// some network stuff with completion
}
及
对于后台获取,我需要两个方法都完成,并且只返回一个完成
当然,我可以嵌套这些方法
- (void)login: (void (^)(BOOL))completion{
//....
[self download:^(BOOL success) {
//....
if (success){
completion(true);
}
}];
}
然而,一旦我添加了一个或多个需要同时完成的方法,代码就会变得混乱
我记得读过一种方法,你可以用它把所有的方法分组在一个线程上,但是我似乎没有合适的词汇在这里或其他地方找到它
我希望你明白我在说什么,给我指出正确的方向
提前感谢您可以做的是将
完成块
向下传递到下载
方法,这样当下载完成时,完成会一直链接到调用方,如下所示:
- (void)login: (void (^)(BOOL))completion{
// some network stuff with completion
[self download:completion];
}
- (void)download: (void (^)(BOOL))completion{
completion(YES);
// some network stuff with completion
}
如果任务真的呈现一个依赖关系,你可能需要在将来添加更多的方法,也许你应该考虑使用.
你是否考虑了调度?你可能会发现这些链接很有用:我很乐意。你给我指出了正确的方向,但你的答案没有这个方向。对我来说,有效的方法是:dispatch_group_t serviceGroup=dispatch_group_create();调度组输入(服务组);[asyncMethod:^(BOOL Success){if(Success){dispatch_group_leave(serviceGroup);}}];- (void)login: (void (^)(BOOL))completion{
// some network stuff with completion
[self download:completion];
}
- (void)download: (void (^)(BOOL))completion{
completion(YES);
// some network stuff with completion
}