Ios 函数能否从异步块返回值

Ios 函数能否从异步块返回值,ios,c,cocoa,block,Ios,C,Cocoa,Block,假设这段代码没有块 int calculateValue (int a, int b) { return doSomeStuff(a,b); } 现在假设函数依赖于异步的东西。因此,我将异步部分声明为如下所示的块 int calculateValue (int a, int b) { int (^myBlock)(int a, int b) = ^int(int a, int b) { // do some complex asynchronous stuff

假设这段代码没有块

int calculateValue (int a, int b) {
  return doSomeStuff(a,b);
}
现在假设函数依赖于异步的东西。因此,我将异步部分声明为如下所示的块

int calculateValue (int a, int b) {

   int (^myBlock)(int a, int b) = ^int(int a, int b) {
      // do some complex asynchronous stuff
      return result;
   };

// can I do this?
return myBlock;

}

是否需要将块内的计算放入主线程上的调度同步或其他内容中?

不,您不能这样做。启动异步函数的目的是让调用方可以继续进行其他工作(可能启动其他异步函数?)

假设您使用的是
dispatch\u async()
-:

dispatch_async()函数立即返回,无需等待调用块:


如果您希望能够处理来自调用者的块的结果,您可以将引用传递给调用者作为块的参数。然后,当异步任务完成时,调用调用方的一个方法来传递“返回值”。

在从原始函数返回之前,您可能需要等待异步任务完成,或者让该函数接受一个回调,您将在异步任务完成时调用该回调。您能用代码解释最后一段吗?谢谢