Domanda

Il sito di una mela, non è suggerito modello per l'utilizzo di code GCD invece di serrature:

// Create queue early
queue = dispatch_queue_create("com.example.tweets", NULL);

// executed main thread
- (NSArray *)getTweets
{
    __block NSArray *a;
    dispatch_sync(queue, ^{
        a = [tweets copyTweets];
    });

    return a;
}

// executed on background thread
- (void)addTweet:(Tweet *)tw
{
    dispatch_async(queue, ^{
        [tweets addTweet:tw];
    });
}

Come si fa a trattare con le serrature e le sezioni critiche con GCD quando si dispone di un thread produttore aggiunta di un sacco di tweets in una volta, invece di uno per uno e avete bisogno di leggere un tweet alla volta per cellForRowAtIndexPath di UITableView?

Se hai tenuto la 'sincronizzazione' su ogni 'leggere', non sarà che causa un sacco di blocchi inutili? Questo è veramente scrivere una volta ogni tanto, ma di leggere spesso scenario ..

È stato utile?

Soluzione

Se la latenza è un problema, forse il produttore deve aggiungere tweets uno per uno, in modo che le chiamate dispatch_sync dal thread dell'interfaccia utente rimangono reattivo.

Non vorrei preoccuparsi di "un sacco di blocchi inutili" a meno che / finché profiling mostra che l'invio blocco testa è in realtà un problema. Dopo tutto, cellForRowAtIndexPath è solo andare a essere chiamata per celle visibili, quindi significa "leggere spesso" qualcosa come decine di volte al secondo, non migliaia o milioni.

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