objective c - Comprensione di dispatch_async




objective-c asynchronous (2)

Versione rapida

Questa è la versione di Swift della risposta Objective-C di David. Si utilizza la coda globale per eseguire le cose in background e la coda principale per aggiornare l'interfaccia utente.

Swift 3

DispatchQueue.global(qos: .background).async {

    // Background Thread

    DispatchQueue.main.async {
        // Run UI Updates
    }
}

Ho una domanda su questo codice

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSData* data = [NSData dataWithContentsOfURL: 
      kLatestKivaLoansURL];
    [self performSelectorOnMainThread:@selector(fetchedData:) 
      withObject:data waitUntilDone:YES];
});

Il primo parametro di questo codice è

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

Stiamo chiedendo a questo codice di eseguire attività seriali su una coda globale la cui definizione stessa è che restituisce una coda concorrente globale di un determinato livello di priorità?

Qual è il vantaggio dell'utilizzo di dispatch_get_global_queue sulla coda principale?

Sono confuso. Potresti per favore aiutarmi a capirlo meglio.


Il motivo principale per cui si utilizza la coda predefinita sulla coda principale è eseguire le attività in background.

Ad esempio, se sto scaricando un file da Internet e voglio aggiornare l'utente sullo stato di avanzamento del download, eseguirò il download nella coda predefinita con priorità e aggiornerò l'interfaccia utente nella coda principale in modo asincrono.

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
    //Background Thread
    dispatch_async(dispatch_get_main_queue(), ^(void){
        //Run UI Updates
    });
});