Question

Je voudrais effectuer un sélecteur sur le thread principal d'un autre fil, mais le sélecteur a plusieurs arguments, semblable à ceci:

-(void) doSomethingWith:(int) a b:(float)b c:(float)c d:(float)d e:(float)e { //... }

Comment puis-je obtenir ce travail avec performSelectorOnMainThread: withObject: waitUntilDone:?

EDIT

Je voudrais expliquer pourquoi je besoin de cela.

Je travaille avec UIImageViews sur le thread principal, et je fais les calculs pour eux sur un autre thread. J'utilise beaucoup de calculs, donc si je fais tout sur le thread principal, les retards d'application. Je sais que les éléments UI ne peuvent être manipulés sur le thread principal, c'est pourquoi je voudrais que cela fonctionne de cette façon, de sorte que le fil conducteur peut écouter de toucher des événements sans décalage.

Était-ce utile?

La solution

Lorsque vous utilisez iOS> = 4, vous feriez ceci:

dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething:1 b:2 c:3 d:4 e:5];
});

C'est comme faire waitUntilDone:NO. Si vous voulez attendre jusqu'à ce que la méthode est terminée, à l'dispatch_sync à la place.

Autres conseils

Vous aurez besoin d'utiliser un NSInvocation

Créer l'objet, définissez la cible, sélecteur et arguments.
Ensuite, utilisez

[ invocationObject performSelectorOnMainThread: @selector( invoke ) withObject: nil, waitUntilDone: NO ];

vous pouvez passer un objet de type NSDictionary / NSArray ayant des arguments nécessaires.

et accepter le même type d'objet dans votre fonction. puis, décomposer les valeurs et procéder à la transformation.

vous devez utiliser NSNumber pour les valeurs numériques pour les ajouter à NSArray / NSDictionary et plus tard dans votre fonction, vous pouvez les convertir en arrière avec intValue / floatValue etc

meilleur de Buck.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top