Frage

Ich möchte einen Selektor auf dem Haupt -Thread aus einem anderen Thread ausführen, aber der Selektor hat mehrere Argumente, ähnlich wie folgt:

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

Wie kann ich das zum Arbeiten bringen? performSelectorOnMainThread: withObject: waitUntilDone:?

BEARBEITEN

Ich möchte erklären, warum ich das brauche.

Ich arbeite mit UIImageviews am Haupt -Thread und mache die Berechnungen für sie in einem anderen Thread. Ich benutze viele Berechnungen. Wenn ich also alles auf dem Haupt -Thread mache, verzögert sich die App. Ich weiß, dass UI -Elemente nur auf dem Hauptfaden manipuliert werden können. Aus diesem Grund möchte ich, dass es auf diese Weise funktioniert, damit der Haupt -Thread Touch -Ereignisse ohne Verzögerungen anhören kann.

War es hilfreich?

Lösung

Wenn Sie iOS> = 4 verwenden, würden Sie dies stattdessen tun:

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

Das ist wie zu tun waitUntilDone:NO. Wenn Sie warten möchten, bis die Methode fertig ist, verwenden Sie dispatch_sync stattdessen.

Andere Tipps

Sie müssen a verwenden Nsinvocation

Erstellen Sie das Objekt, legen Sie das Ziel, den Selektor und die Argumente fest.
Dann benutze

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

Sie können ein Objekt des NSDictionary/NSArray -Typs übergeben, der Argumente benötigt.

und akzeptieren Sie den gleichen Objekttyp in Ihrer Funktion. Dann zersetzen Sie die Werte und fahren Sie mit der Verarbeitung fort.

Sie müssen nsNumber für numerische Werte verwenden, um sie zu nsarray/nsdictionary hinzuzufügen, und später in Ihrer Funktion können Sie sie mit zurückbekommen intValue/floatValue etc

Best of Buck.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top