Domanda

desidero eseguire un selettore sul thread principale da un altro thread, ma il selettore ha molteplici argomenti, simile a questo:

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

Come posso ottenere questo lavoro con performSelectorOnMainThread: withObject: waitUntilDone:?

Modifica

Vorrei spiegare perché ho bisogno di questo.

sto lavorando con UIImageViews sul thread principale, e fare i calcoli per loro su un altro thread. Io uso un sacco di calcoli quindi se faccio tutto sul thread principale, i GAL app. So che gli elementi dell'interfaccia utente possono essere manipolati solo sul thread principale, questo è il motivo per cui vorrei farlo funzionare in questo modo, in modo che il thread principale può ascoltare toccare eventi senza ritardi.

È stato utile?

Soluzione

Quando si utilizza iOS> = 4, si farebbe questo, invece:

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

Ecco come fare waitUntilDone:NO. Se si vuole aspettare fino a quando il metodo è finito, l'uso dispatch_sync invece.

Altri suggerimenti

Sarà necessario utilizzare un NSInvocation

Crea l'oggetto, impostare il bersaglio, di selezione e gli argomenti.
Quindi, l'uso

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

è possibile passare un oggetto di tipo NSDictionary / NSArray avendo argomenti richiesti.

e accettare lo stesso tipo di oggetto nella funzione. poi, decomporre i valori e procedere con l'elaborazione.

è necessario utilizzare NSNumber per i valori numerici per aggiungerli al NSArray / NSDictionary e più tardi nella funzione, è possibile convertire indietro con intValue / floatValue etc

meglio del dollaro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top