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