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()函数立即返回,无需等待调用块:
如果您希望能够处理来自调用者的块的结果,您可以将引用传递给调用者作为块的参数。然后,当异步任务完成时,调用调用方的一个方法来传递“返回值”。在从原始函数返回之前,您可能需要等待异步任务完成,或者让该函数接受一个回调,您将在异步任务完成时调用该回调。您能用代码解释最后一段吗?谢谢