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
}