如果我有一个后台线程做一些网络的东西,并且一些后台方法进行'performSelectorOnMainThread'调用,这些调用是否会中断执行当前代码块(正在主线程上执行)? / p>
答案 0 :(得分:1)
如果waitUntilDone
设置为YES
,则绝对会中断执行调用performSelectorOnMainThread
的代码。如果它被设置为NO
,那么它将在主线程上对选择器进行排队。
如果performSelectorOnMainThread
的调用者不是主线程,那么在“当前代码块”完成之前选择器是否运行将完全取决于CPU所处的状态。可能还有更多一个CPU,所以你可能同时安排了2个线程,或者只是操作系统可能决定在一段时间后安排主线程而不是你当前的线程。
所以基本上,是的,这些调用可以中断当前代码块的执行,就像你应该熟悉的多线程编程一样。
[通过“当前代码块”我假设您的意思是performSelectorOnMainThread
]
<强>更新强>
啊,对,你的意思是“它能否中断当前正在主线程上执行的代码?”。对此的答案绝对不是。它被安排在主线程的运行循环中,以便在下一轮循环运行。
答案 1 :(得分:1)
不,他们会,也不会。 performSelector
方法组在运行循环上调度操作。只有在当前代码块返回到运行循环后,才会执行这些操作。 (假设“当前代码块”表示您的代码在主线程上运行)