Tenho usado enumerateObjectsUsingBlock:
muito ultimamente para minhas necessidades de enumeração rápida e estou tendo dificuldade em entender o uso de BOOL *stop
no bloco de enumeração.
Os NSArray
estados de referência da classe
stop
: Uma referência a um valor booleano. O bloco pode definir o valorYES
para interromper o processamento adicional da matriz. Ostop
argumento é um argumento exclusivo. Você só deve definir esse booleano comoYES
dentro do bloco.
Então, é claro, posso adicionar o seguinte em meu bloco para interromper a enumeração:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Pelo que pude perceber, não definir explicitamente *stop
como YES
não tem efeitos colaterais negativos. A enumeração parece parar automaticamente no final da matriz. Então, usar é *stop
realmente necessário em um bloco?
stop
sinalizador é consultivo; a enumeração pode continuar por algum número indefinido de iterações no caso simultâneo, por exemplo. Ou seja, você não deve definir uma__block
variável incondicionalmente em cada passagem pela enumeração e esperar que seja o "último" valor ao usarstop
para encerrar antecipadamente. Você deve sempre acoplar o "não, use este objeto" com a configuraçãostop = YES;
.