假设此代码没有块
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_sync或其他内容?
答案 0 :(得分:1)
不,你不能这样做。启动异步函数的目的是让调用者可以继续进行其他工作(也许启动其他异步函数?)。
假设您使用的是dispatch_async()
- from the docs:
dispatch_async()函数立即返回,而不等待调用块:
如果您希望能够使用来自调用者的块结果,则可以将对调用者的引用作为块的参数传递。然后,当您的异步任务完成后,请致电其中一个来电者方法以传递您的"返回值"。