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;
}