WaitUntilDOne
中performSelectorOnMainThread
的重要性是什么?
设置为YES
的{{1}}或NO
在应用上可以有什么方式?
更新
我的问题应该是:在什么情况下他们会有所不同?
塞尔吉奥的答案是我期待的答案。
答案 0 :(得分:12)
来自Apple docs about waitUntilDone
:
一个布尔值,指定当前线程是否阻塞,直到在主线程上的接收器上执行指定的选择器之后。指定YES以阻止此线程;否则,指定NO以使此方法立即返回。 如果当前线程也是主线程,并且您为此参数指定了YES,则会立即传递和处理该消息。
您必须关注执行performSelectorOnMainThread
的线程。该线程将阻塞并等待主线程完成该选择器;例如,工作者线程需要向主线程发送消息(例如,将一些信息存储到不是线程安全的某个中央存储器)。在发出同类操作之前,工作人员可能希望阻止并等待操作完成。所以,waitUntilDone
在这种情况下会派上用场。
答案 1 :(得分:9)
如果您说NO
,performSelectorOnMainThread
不会阻止,并且会立即执行performSelectorOnMainThread
之后的下一行代码而不等待主线程执行您的选择器。< / p>
如果您说YES
,您调用performSelectorOnMainThread
的线程将阻止该行的执行,直到主线程执行了您的选择器,然后它将继续。
答案 2 :(得分:1)
YES表示当前线程阻塞/等待直到执行选择器,NO表示performSelectorOnMainThread:withObject:waitUntilDone:
立即返回
答案 3 :(得分:1)
通常,您希望避免使用YES
阻止当前线程的执行。
如果NO
,该消息将被添加到主线程的运行循环中,以便在运行循环恢复时执行 - 可以很快并且几乎立即执行/同时进行。