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 *stopdans 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 surYESpour arrêter le traitement ultérieur du tableau. L'stopargument est un argument externe. Vous ne devriez jamais définir ce booléen queYESdans 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 *stopsur YESn'a aucun effet secondaire négatif. L'énumération semble s'arrêter automatiquement à la fin du tableau. L'utilisation est-elle *stopvraiment nécessaire dans un bloc?
stopdrapeau 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__blockvariable inconditionnellement à chaque passage dans l'énumération et vous attendre à ce que ce soit la "dernière" valeur lors de l'utilisationstoppour terminer tôt. Vous devez toujours coupler le "non, utilisez cet objet" avec le paramètrestop = YES;.