Domanda

Inizio il mio Asihttprequest in modo sincrono in un thread separato come questo:

//inside this start method I create my ASIHTTPRequest and start it
dispatch_async(dispatch_get_global_queue(0, 0), ^{
    [process start];
});
.

Ma il completamento è ancora sparato sul filo principale. può mantenere l'esecuzione del completamentoblock nello stesso filetto come dove è stata avviata la richiesta?

L'unica cosa che posso trovare per risolvere questo è definire una coda di spedizione e eseguire manualmente il completamentoblock nello stesso thread, tenendo così un riferimento a una coda creata.Ma questo non lo risolve direttamente perché ti passerebbe per un piccolo momento frollato nel thread principale prima di reindirizzare il resto del codice alla coda di spedizione creata.

Qualcuno ha una soluzione migliore?

Modifica: lo stesso è anche vero per i blocchi di completamento dell'afnetworking ...

È stato utile?

Soluzione

OK, per rispondere alla mia domanda: Asihttprequest framework non ha un'opzione per avviare i blocchi di completamento in un filo diverso.

Invece è possibile utilizzare il quadro AFNetwork.Qui hai due proprietà su qualsiasi tipo di anteprazione chiamata " SuccessCallbackQueh 'e' failureCallBackQueue '.Dove è possibile aggiungere un predefinito ' dispatch_queue_t ' per gestire l'esecuzione dei blocchi di successo e guasto.

Spero che questo aiuterà gli altri con lo stesso problema!

Aggiornamento: esempio

 dispatch_queue_t requestQueue = dispatch_queue_create("requestQueue", NULL);
 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:yourRequest];
 operation.successCallbackQueue = requestQueue;
 operation.failureCallbackQueue = requestQueue;
 [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // add code for completion
 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // add code for failure
 }];
 [operation start];
.

Altri suggerimenti

Prova a utilizzare una coda definita della tua creazione.Quindi è possibile (una volta finalmente termina, nel suo blocco di completamento) segnale alla coda globale per aggiornare qualsiasi display necessario.

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