Sto usando GCD
per inviare la richiesta HTTP
in modo asincrono. Ecco il codice che non funziona:GCD con NSURLConnection
dispatch_async(connectionQueue, ^{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:someURL]]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];//Not working
});
il codice sopra non funziona affatto. Non ricevo alcuna richiamata nei metodi NSURLConnectionDelegate.
ma quando ho provato il seguente codice, tutto ha funzionato bene e ho avuto callback corretto
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:someURL]]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
dispatch_async(connectionQueue, ^{
[connection start]; // working fine. But WHY ????
});
qualcuno può spiegare questo strano comportamento di blocco/GCD?
NSURLConnection esegue già il caricamento asincrono dei dati, quindi perché utilizzare GCD? –
è Apple lo consiglia? utilizzando GCD per mantenere il blocco sopra il pezzo di codice. – Ashu
Il secondo esempio ha già avviato la connessione prima del blocco dispatch_async. Se non si stabilisce che la connessione non si avvia immediatamente impostando il valore "Inizia immediatamente" su "NO", la connessione verrà avviata non appena viene creata un'istanza. In questo caso il blocco dispatch_async è ridondante. Vedere la mia risposta di seguito per un esempio di come utilizzare NSURLConnection in modo asincrono. – user298261