WaitUntilDOne在performSelectorOnMainThread中有什么意义?
WaitUntilDOne
在performSelectorOnMainThread
什么意义?
以什么方式YES
或NO
设置为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
,则消息将被添加到主线程的运行循环的待执行列表中,以便在运行循环恢复时执行 – 这可能很快且实际上立即/并发地执行。