Objective c performSelectorOnMainThread是否会中断当前代码块?

Objective c performSelectorOnMainThread是否会中断当前代码块?,objective-c,multithreading,Objective C,Multithreading,如果我有一个后台线程做一些网络工作,并且一些后台方法进行'performSelectorOnMainThread'调用,这些调用是否会/能否中断当前代码块的执行(在主线程上执行)?如果waitUntilDone设置为YES,然后它肯定会中断调用performselectornmainthread的代码的执行。如果设置为NO,则它将对要在主线程上执行的选择器进行排队 如果performSelectorOnMainThread的调用方不是主线程,那么选择器是否在“当前代码块”完成之前运行将完全取决于

如果我有一个后台线程做一些网络工作,并且一些后台方法进行'performSelectorOnMainThread'调用,这些调用是否会/能否中断当前代码块的执行(在主线程上执行)?

如果
waitUntilDone
设置为
YES
,然后它肯定会中断调用
performselectornmainthread
的代码的执行。如果设置为
NO
,则它将对要在主线程上执行的选择器进行排队

如果
performSelectorOnMainThread
的调用方不是主线程,那么选择器是否在“当前代码块”完成之前运行将完全取决于CPU所处的状态。可能有多个CPU,因此您可能同时调度了两个线程,或者只是操作系统决定在一段时间后调度主线程而不是当前线程

因此,基本上,是的,这些调用可以中断当前代码块的执行,就像您应该熟悉的多线程编程一样

[我所说的“当前代码块”是指
performselectornmainthread
]的调用方]

更新:


啊,对了,你的意思是“它能中断当前在主线程上执行的代码吗?”。答案肯定不是。它被安排在主线程的运行循环中,下次在循环中运行。

否,它们将运行,也不能运行。
performSelector
方法组在运行循环上调度操作。只有在当前代码块返回到运行循环后,才会执行这些操作。(假设“当前代码块”是指在主线程上运行的代码)

这是错误的。这些调用不能中断在主线程上执行的当前代码块的执行。很抱歉,我编辑了我的问题以反映当前代码块正在主线程上运行。对,问题中已经澄清了这一点。更新的答案。然后,仍然会执行主线程上的“当前代码块”,直到它返回到运行循环。然后运行发布的选择器。如果
waitUntilDone
设置为
YES
,则调用线程将暂停,直到完成此操作。如果主线程当前处于某个循环中,需要10秒,则调用线程必须等待,直到这10秒结束,再加上已发布的选择器所花费的时间。是的。起初我误解了他所说的“当前代码块”的意思。我用推理更新了答案,基于困惑的答案被澄清了。