WaitUntilDOne在performSelectorOnMainThread中有什么意义?

WaitUntilDOneperformSelectorOnMainThread什么意义?

以什么方式YESNO设置为WaitUntilDone可以在应用程序上?

更新:

我的问题应该是:他们在哪些情况下有所作为?

塞尔吉奥的回答是我期待的那个。

从Apple关于waitUntilDone文档 :

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

你必须关注哪个线程正在执行performSelectorOnMainThread 。 该线程将阻塞,并等待主线程完成该select器; 比如说,工作者线程需要向主线程发送消息(例如,将某些信息存储到某个不是线程安全的中央存储器)。 工作人员可能想要阻止并等待操作完成,然后再发出同类操作。 所以, waitUntilDone在这种情况下派上用场。

如果你说NO ,那么performSelectorOnMainThread不会阻塞,并立即执行performSelectorOnMainThread之后的下一行代码,而不用等待主线程执行你的select器。

如果你说YES ,你调用performSelectorOnMainThread的线程将阻塞该线的执行,直到主线程执行你的select器,那么它将继续。

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

一般来说,你想避免使用YES来阻止当前线程的执行。

如果是NO ,则消息将被添加到主线程的运行循环的待执行列表中,以便在运行循环恢复时执行 – 这可能很快且实际上立即/并发地执行。