Ultimamente sto usando enumerateKeysAndObjectsUsingBlock:
e oggi ho esitato quando uno dei miei colleghi al posto di lavoro ha sottolineato che questo metodo di enumerazione può essere chiamato da thread separati e il mio codice potrebbe non funzionare come previsto. Ha anche suggerito che dovrei usare l'enumerazione rapida. Il problema è che mi piace molto il enumerateKeysAndObjectsUsingBlock:
e non mi piace l'enumerazione veloce a causa della sua natura quando si tratta di dizionario.enumerateKeysAndObjectsUsingBlock: posso essere sicuro che sia chiamato sullo stesso thread?
mio metodo sembrava seguente
- (NSArray *)someMethod
{
__block NSMutableArray *myArray = [NSMutableArray array];
[self.myDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[myArray addObject:obj];
}
return myArray;
}
Posso essere sicuro che myArray restituisce sempre i valori attesi (assumendo self.myDictionary
non è vuoto) e sarà sempre chiamato sullo stesso thread come il someMethod?
Sono consapevole che esiste un metodo enumerateKeysAndObjectsWithOptions:usingBlock:
e che si chiama con l'opzione NSEnumerationConcurrent
che eseguirà l'enumerazione contemporaneamente su più thread.
Ma non riesco a trovare alcuna documentazione relativa a enumerateKeysAndObjectsUsingBlock
.
Lo stesso si riferisce a enumerateObjectsUsingBlock:
utilizzato su array.
Che dire della "natura" dell'enumerazione veloce non ti piace così fortemente che preferiresti usare questo metodo di cui non sei sicuro? –
L'ordine conta qui come immagazzini le cose nella tua matrice all'interno di questo blocco? – Unheilig
Con "natura" intendo chiamare allKeys che le enumera e quindi accede all'oggetto, mentre con l'enumerazione dei blocchi si evita ciò. Blocco: codice più comodo e più facile e forse meno scritto sulla mia estremità. – sumofighter666