Контекст переключается на iOS с помощью «executeSelectorOnMainThread» - PullRequest
0 голосов
/ 03 февраля 2012

У меня странные проблемы с многопоточностью на iOS.Рассмотрим простой метод, подобный следующему:

- (BOOL)doSomething
{
   [self doA];
   [self doB];
}

Этот метод должен only выполняться в контексте основного потока.Мне нужно вызвать этот метод из рабочего потока.Я использую performSelectorOnMainThread для этой цели.

Если я сделаю все как описано здесь.Может ли произойти переключение контекста между doA и `doB?

(я так не думаю, я просто хочу убедиться, что мое понимание именно здесь)

1 Ответ

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

Под «переключением контекста» я предполагаю, что вы имеете в виду переключение основного потока на какое-либо другое событие основного потока (как вы всегда можете переключиться на другой рабочий поток в любое время).

Однако основной поток завершит все действия doSomething, прежде чем делать что-либо еще.

Выдержка из executeSelectorOnMainThread :

Этот метод ставит сообщение в очередь в цикле выполнения основного потока. с использованием общих режимов цикла выполнения, то есть режимов, связанных с Константа NSRunLoopCommonModes. как часть нормального цикла выполнения обработка, основной поток удаляет сообщение (если оно работает в одном из общих режимов цикла выполнения) и вызывает требуемый Метод. Несколько вызовов этого метода из одного потока вызывают соответствующие селекторы должны быть поставлены в очередь и выполнены в том же порядок, в котором были сделаны звонки.

...