0

У меня есть странные проблемы с потоками в iOS. Рассмотрим простой метод, как это:Контекстные переключатели на iOS, используя «performSelectorOnMainThread»

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

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

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

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

ответ

1

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

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

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

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