enumerateObjectsUsingBlock:Ultimamente ho usato molto per le mie esigenze di enumerazione rapida e ho difficoltà a capire l'uso di BOOL *stopnel blocco di enumerazione.
Gli NSArraystati di riferimento della classe
stop: Un riferimento a un valore booleano. Il blocco può impostare il valore suYESper interrompere l'ulteriore elaborazione dell'array. L'stopargomento è un argomento solo out. Dovresti sempre impostare questo valore booleanoYESall'interno del blocco.
Quindi, ovviamente, posso aggiungere quanto segue nel mio blocco per interrompere l'enumerazione:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Da quello che ho potuto dire, non impostare esplicitamente *stopsu YESnon ha effetti collaterali negativi. L'enumerazione sembra arrestarsi automaticamente alla fine della matrice. Quindi l'uso è *stopdavvero necessario in un blocco?
stopbandiera è di avviso; l'enumerazione può continuare per un numero indefinito di iterazioni nel caso simultaneo, ad esempio. Cioè non dovresti impostare una__blockvariabile incondizionatamente su ogni passaggio attraverso l'enumerazione e aspettarti che sia l '"ultimo" valore quando si usastopper terminare anticipatamente. Dovresti sempre accoppiare "no, usa questo oggetto" con l'impostazionestop = YES;.