Будет ли выполнениеSelectorOnMainThread прерывать текущий блок кода? - PullRequest
0 голосов
/ 06 февраля 2012

Если у меня есть фоновый поток, выполняющий какие-то сетевые операции, и некоторые фоновые методы выполняют вызовы «executeSelectorOnMainThread», будут ли / могут ли эти вызовы прерывать выполнение текущего блока кода (который выполняется в основном потоке)?

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Нет, они будут и не могут. Группа performSelector методов планирует действия в цикле выполнения. Только после того, как ваш текущий блок кода вернется в цикл выполнения, эти действия будут выполнены. (Предполагая, что «текущий блок кода» означает, что ваш код работает в главном потоке)

1 голос
/ 06 февраля 2012

Если для waitUntilDone установлено значение YES, то это точно прервет выполнение кода, вызывающего performSelectorOnMainThread. Если он установлен на NO, он поставит в очередь селектор для выполнения в главном потоке.

Если вызывающая сторона performSelectorOnMainThread не является основным потоком, то будет ли селектор запущен до завершения «текущего блока кода», будет полностью зависеть от состояния, в котором находится ЦП. Возможно, имеется более одного ЦП таким образом, у вас может быть запланировано 2 ваших потока на одно и то же время, или просто ОС через некоторое время решила запланировать основной поток вместо вашего текущего.

Так что, в принципе, да, эти вызовы могут прервать выполнение текущего блока кода, точно так же, как вы должны быть знакомы с многопоточным программированием.

[Под «текущим кодовым блоком» я предполагаю, что вы имеете в виду вызывающего пользователя performSelectorOnMainThread]

Обновление:

Ах, да, вы имеете в виду «Может ли это прервать код, который в данный момент выполняется в главном потоке?». Ответ на это, безусловно, нет. В следующем цикле запуска основного потока запланировано выполнение следующего цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...