Mon code doit garantir une certaine opération sur le thread principal, mais les appels peuvent provenir de threads d'arrière-plan.
Afin de détecter les situations dans le fond, j'ai été en utilisant les éléments suivants:
- (void)selectorToRunInMainThread:(id)arguments
{
// push to main thread
if ([NSRunLoop currentRunLoop] != [NSRunLoop mainRunLoop])
{
[self performSelectorOnMainThread:@selector(selectorToRunInMainThread:) withObject:arguments waitUntilDone:NO];
return;
}
/*
... function content ...
*/
}
Cela fonctionne sur iOS 4 et iOS 3.2 mais pas sur iOS 3.1.3 et plus tôt. Dans les versions antérieures, la fonction reçois appelée dans une boucle sans fin.
La modification de la comparaison:
if (![[NSRunLoop currentRunLoop] isEqualTo:[NSRunLoop mainRunLoop]])
n'a aucun effet, ils ne comparez jamais à la même valeur.
J'ai trouvé une solution qui semble fonctionner, mais je voudrais voir ce que d'autres personnes qui pensent que le premier.