Ultimamente ho utilizzato enumerateObjectsUsingBlock:
per le mie esigenze di enumerazione rapida e sto riscontrando difficoltà nell'utilizzo di BOOL *stop
nel blocco di enumerazione.Qual è l'argomento stop BOOL * per enumerateObjectsUsingBlock: usato per?
Gli stati di riferimento NSArray
classe
stop
: Un riferimento a un valore booleano. Il blocco può impostare il valore suYES
su interrompere l'ulteriore elaborazione dell'array. L'argomentostop
è un argomento solo-out . Dovresti sempre impostare questo booleano suYES
all'interno del blocco .
Così poi, naturalmente, posso aggiungere il seguente nel mio blocco per fermare l'enumerazione:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Da quello che ho potuto dire, non impostando esplicitamente *stop
-YES
non ha eventuali effetti collaterali negativi. L'enumerazione sembra fermarsi automaticamente alla fine dell'array. Quindi è davvero necessario usare *stop
in un blocco?
Si noti che il flag 'stop' è di tipo consultivo; l'enumerazione può continuare per un numero indefinito di iterazioni nel caso concorrente, per esempio. Cioè non dovresti impostare una variabile '__block' incondizionatamente su ogni passaggio attraverso l'enumerazione e aspettarti che sia il valore" last "quando usi' stop' per terminare anticipatamente. Dovresti sempre accoppiare il "no, usa questo oggetto" con l'impostazione 'stop = SÌ;'. – bbum
@bbum, puoi chiarire se il comportamento continuato si applica _solo_ all'enumerazione simultanea? Anche se in questo caso è perfettamente comprensibile, non è documentato, e sarebbe un boccone abbastanza sorprendente per l'enumerazione "seriale". –