假设这段代码没有 block
int calculateValue (int a, int b) {
return doSomeStuff(a,b);
}
现在假设函数依赖于异步的东西。所以我将异步部分声明为这样的 block
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;
}
是否需要将 block 内的计算放入主线程上的dispatch_sync或其他什么?
Best Answer-推荐答案 strong>
不,你不能那样做。启动异步函数的目的是让调用者可以继续其他工作(也许启动其他异步函数?)。
假设您正在使用 dispatch_async() - from the docs :
The dispatch_async() function returns immediately, without waiting for the block to be invoked:
如果您希望能够使用来自调用者的 block 的结果,您可以将对调用者的引用作为参数传递给您的 block 。然后当你的异步任务完成时,调用调用者的方法之一来传递你的“返回值”。
关于ios - 函数可以从异步 block 返回值吗,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/23972011/
|