J'en ai beaucoup utilisé enumerateObjectsUsingBlock:
ces derniers temps pour mes besoins d'énumération rapide, et j'ai du mal à comprendre l'utilisation de BOOL *stop
dans le bloc d'énumération.
Les NSArray
états de référence de classe
stop
: Une référence à une valeur booléenne. Le bloc peut définir la valeur surYES
pour arrêter le traitement ultérieur du tableau. L'stop
argument est un argument externe. Vous ne devriez jamais définir ce booléen queYES
dans le bloc.
Alors bien sûr, je peux ajouter ce qui suit dans mon bloc pour arrêter l'énumération:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
D'après ce que j'ai pu dire, ne pas définir explicitement *stop
sur YES
n'a aucun effet secondaire négatif. L'énumération semble s'arrêter automatiquement à la fin du tableau. L'utilisation est-elle *stop
vraiment nécessaire dans un bloc?
la source
stop
drapeau est consultatif; l'énumération peut continuer pendant un nombre indéfini d'itérations dans le cas simultané, par exemple. C'est-à-dire que vous ne devriez pas définir une__block
variable inconditionnellement à chaque passage dans l'énumération et vous attendre à ce que ce soit la "dernière" valeur lors de l'utilisationstop
pour terminer tôt. Vous devez toujours coupler le "non, utilisez cet objet" avec le paramètrestop = YES;
.