enumerateObjectsUsingBlock:
Ultimamente ho usato molto per le mie esigenze di enumerazione rapida e ho difficoltà a capire l'uso di BOOL *stop
nel blocco di enumerazione.
Gli NSArray
stati di riferimento della classe
stop
: Un riferimento a un valore booleano. Il blocco può impostare il valore suYES
per interrompere l'ulteriore elaborazione dell'array. L'stop
argomento è un argomento solo out. Dovresti sempre impostare questo valore booleanoYES
all'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 *stop
su YES
non ha effetti collaterali negativi. L'enumerazione sembra arrestarsi automaticamente alla fine della matrice. Quindi l'uso è *stop
davvero necessario in un blocco?
stop
bandiera è di avviso; l'enumerazione può continuare per un numero indefinito di iterazioni nel caso simultaneo, ad esempio. Cioè non dovresti impostare una__block
variabile incondizionatamente su ogni passaggio attraverso l'enumerazione e aspettarti che sia l '"ultimo" valore quando si usastop
per terminare anticipatamente. Dovresti sempre accoppiare "no, usa questo oggetto" con l'impostazionestop = YES;
.