iOS - обеспечить выполнение в главном потоке

Я хочу знать, как позвонить моему function в основной теме.

Как мне убедиться, что мой function вызывается в основном потоке?

(это следует из моего предыдущего вопроса).

4 ответа

Решение

Есть ли какое-то правило, которому я могу следовать, чтобы быть уверенным, что мое приложение выполняет мой собственный код только в главном потоке?

Как правило, вам не нужно ничего предпринимать, чтобы обеспечить это - вашего списка вещей обычно достаточно. Если вы не взаимодействуете с каким-либо API, который порождает поток и запускает ваш код в фоновом режиме, вы будете работать в основном потоке.

Если вы хотите быть действительно уверенным, вы можете делать такие вещи, как

[self performSelectorOnMainThread:@selector(myMethod:) withObject:anObj waitUntilDone:YES];

выполнить метод в главном потоке. (Есть также эквивалент GCD.)

Это сделает это:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ {

   //Your code goes in here
   NSLog(@"Main Thread Code");

}];

Надеюсь это поможет!

Когда вы используете iOS >= 4

dispatch_async(dispatch_get_main_queue(), ^{
  //Your main thread code goes in here
  NSLog(@"Im on the main thread");       
});

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

if (![[NSThread currentThread] isMainThread]) {
    [self performSelector:_cmd onThread:[NSThread mainThread] withObject:someObject waitUntilDone:NO];
    return;
}
Другие вопросы по тегам