菜鸟教程小白 发表于 2022-12-12 22:31:56

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]
查看完整版本: ios - 函数可以从异步 block 返回值吗