WaitUntilDOne在performSelectorOnMainThread中有什么意义?

时间:2012-01-20 15:26:17

标签: objective-c ios nsobject

WaitUntilDOneperformSelectorOnMainThread的重要性是什么?

设置为YES的{​​{1}}或NO在应用上可以有什么方式?

更新

我的问题应该是:在什么情况下他们会有所不同?

塞尔吉奥的答案是我期待的答案。

4 个答案:

答案 0 :(得分:12)

来自Apple docs about waitUntilDone

  

一个布尔值,指定当前线程是否阻塞,直到在主线程上的接收器上执行指定的选择器之后。指定YES以阻止此线程;否则,指定NO以使此方法立即返回。   如果当前线程也是主线程,并且您为此参数指定了YES,则会立即传递和处理该消息。

您必须关注执行performSelectorOnMainThread的线程。该线程将阻塞并等待主线程完成该选择器;例如,工作者线程需要向主线程发送消息(例如,将一些信息存储到不是线程安全的某个中央存储器)。在发出同类操作之前,工作人员可能希望阻止并等待操作完成。所以,waitUntilDone在这种情况下会派上用场。

答案 1 :(得分:9)

如果您说NOperformSelectorOnMainThread不会阻止,并且会立即执行performSelectorOnMainThread之后的下一行代码而不等待主线程执行您的选择器。< / p>

如果您说YES,您调用performSelectorOnMainThread的线程将阻止该行的执行,直到主线程执行了您的选择器,然后它将继续。

答案 2 :(得分:1)

YES表示当前线程阻塞/等待直到执行选择器,NO表示performSelectorOnMainThread:withObject:waitUntilDone:立即返回

答案 3 :(得分:1)

通常,您希望避免使用YES阻止当前线程的执行。

如果NO,该消息将被添加到主线程的运行循环中,以便在运行循环恢复时执行 - 可以很快并且几乎立即执行/同时进行。