2015-06-15 13 views
6

stavo progettando un app che utilizza NSURLSession e pensare a metterlo in un thread diverso con Grand Central Dispatch, ma se NSURLSession automaticamente fa che in sottofondo, non avrei dovuto usare GCD allora, giusto?NSURLSession ha luogo in un thread separato?

Quindi, in altre parole, non NSURLSession utilizzare automaticamente Grand Central Dispatch in background, in modo che non c'è bisogno di preoccuparsi?

risposta

14

Sì,

NSURLSession fa il suo lavoro in un thread in background. Il download SEMPRE avviene su un thread in background.

è possibile controllare se i suoi metodi di completamento vengono eseguiti su un thread in background o meno dalla coda si passa nel parametro delegateQueue al metodo init. Se si passa a zero, viene creata una coda di operazioni seriali (in background thread) in cui vengono chiamati i metodi di completamento. Se si passa in NSOperationQueue.mainQueue(), i metodi di delega di completamento verranno richiamati sul thread principale e non sarà necessario includere le chiamate dell'interfaccia nelle chiamate dispatch_async() al thread principale.

3

Ecco un esempio di una richiesta NSURLSession:

[[session dataTaskWithURL:[NSURL URLWithString:someURL] 
     completionHandler:^(NSData *data, 
          NSURLResponse *response, 
          NSError *error) { 
     // handle response 

    }] resume]; 

dalla documentazione: "Questo metodo è inteso come alternativa al sendAsynchronousRequest: coda: completionHandler: Metodo di NSURLConnection, grazie alla possibilità di supportare personalizzato autenticazione e cancellazione. " risposta breve è: sì, NSURLSession farà operazioni in background. Non devi preoccuparti di questo blocco della tua interfaccia utente.

+0

La tua risposta è circa la NSURLConnection deprecato. Ma la domanda riguarda NSURLSession. – Fogmeister

+0

Aggiornato la mia risposta a NSURLSession – erparker

+0

Le operazioni in background sono un'altra cosa. 'NSURLSession' usa sempre un thread in background per trasferire i dati dal dispositivo remoto. Quando i documenti su 'NSURLSession' parlano di background, stanno parlando di continuare l'attività download/dati anche se la tua app è in background, sospesa o addirittura terminata. –

Problemi correlati