Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将多个异步调用放入队列中_Iphone_Objective C_Ios_Cocoa Touch_Gdc - Fatal编程技术网

Iphone 将多个异步调用放入队列中

Iphone 将多个异步调用放入队列中,iphone,objective-c,ios,cocoa-touch,gdc,Iphone,Objective C,Ios,Cocoa Touch,Gdc,我有几个异步调用,我将它们组合在一个调用中: -(void) loadA:(ArrayBlock)completion failure(FailureBlock):failure; -(void) loadB:(ArrayBlock)completion failure(FailureBlock):failure; -(void) loadC:(ArrayBlock)completion failure(FailureBlock):failure; 使用上述调用的组合方法: - (void)

我有几个异步调用,我将它们组合在一个调用中:

-(void) loadA:(ArrayBlock)completion failure(FailureBlock):failure;
-(void) loadB:(ArrayBlock)completion failure(FailureBlock):failure;
-(void) loadC:(ArrayBlock)completion failure(FailureBlock):failure;
使用上述调用的组合方法:

- (void) loadAll:(ObjectBlock)completion;
完成块包含一个具有三个数组的对象,称为
array[A-C]
。如果任何子调用失败,则只需将对象中的相应数组设置为nil

与其嵌套这三个块,并在失败时调用下一个块或完成前一个块时调用下一个块(这会变得非常混乱)-我想使用GCD执行以下操作:

  • 将所有呼叫添加到队列
  • 等待所有调用完成(调用成功或失败块)
  • 组合来自完成块的所有结果,并调用
    loadAll
    方法的完成块

  • 我知道在GCD中使用同步调用可以实现这一点,但我不知道如何使用我的三个异步“子调用”实现这一点。

    阅读调度组-您可以对它们执行同步等待。事实上,凌乱是一个错误的词——稍微复杂一点可能会更好地表达它。我在嵌套分派块和使用组等待中间结果方面很幸运。您还可以使用dispatch_async_barrier来防止队列中已经存在的块在执行该块之前完成。块也可以将块添加到其调度队列中

    我记得存在依赖关系,但我现在在CGD文献中找不到该部分

    我真正建议你做的是用铅笔在一张纸上画出来,一旦你说服了自己,你就知道如何开始编码了