ios - Firebase signInWithEmail 函数是否在主线程中运行?
<p><p>当我运行以下代码时:</p>
<hr/>
<pre><code>[ signInWithEmail:@"[email protected]"
password:@"hdfjhfjhdbf"
completion:^(FIRUser *user, NSError *error) {
NSLog(@"I am in Block");
}];
NSLog(@"I am here");
</code></pre>
<hr/>
<p>我的输出是:
我在这里
我在街区
这意味着 FIRAuthblock 在主线程以外的另一个线程中运行。
我在代码中添加了额外的一行(无限循环)</p>
<hr/>
<pre><code>[ signInWithEmail:@"[email protected]"
password:@"hdfjhfjhdbf"
completion:^(FIRUser *user, NSError *error) {
NSLog(@"I am in Block");
}];
NSLog(@"I am here");
while (YES) {};
</code></pre>
<hr/>
<p>我的输出是:
我来了</p>
<p>问题:如果 FIRAuthblock 在另一个线程中运行,它应该打印“我在 block 中”,无论我们在主线程中有无限循环。怎么可能?FIRAuthblock 在同一个主线程中以较低的优先级运行吗?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>通常在 Firebase 中我们:</p>
<ul>
<li><p>在单独的线程中运行与网络和磁盘交互的操作</p></li>
<li><p>在主线程上显示回调,以便您的代码可以与 UI 交互</p></li>
</ul>
<p>我没有针对这个具体案例进行验证,但希望它能够正常工作。这意味着您的无限循环正在阻止执行完成 block 。</p>
<p>如果您想等待结果,请使用此处所述的信号量:<a href="https://stackoverflow.com/questions/4326350/how-do-i-wait-for-an-asynchronously-dispatched-block-to-finish" rel="noreferrer noopener nofollow">How do I wait for an asynchronously dispatched block to finish?</a> </p></p>
<p style="font-size: 20px;">关于ios - Firebase signInWithEmail 函数是否在主线程中运行?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/37914620/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/37914620/
</a>
</p>
页:
[1]