41 votes

Énumération rapide sur un objet nul

Que devrait-il se passer ici? Est-ce sûr?

 NSArray *nullArray=nil;
for (id obj in nullArray) {
  // blah
}
 

Plus précisément, dois-je faire ceci:

 NSArray *array=[thing methodThatMightReturnNil];
if (array) {
  for (id obj in array) {
    // blah
  }
}
 

ou est-ce bien ?:

 for (id obj in [thing methodThatMightReturnNil]) {
  // blah
}
 

48voto

andyvn22 Points 6950

L'énumération rapide est implémentée via la méthode - countByEnumeratingWithState:objects:count: , qui renvoie 0 pour signaler la fin de la boucle. Puisque nil renvoie 0 pour toute méthode, votre boucle ne doit jamais s'exécuter. (Donc c'est sûr.)

17voto

omz Points 38947

Rien ne va arriver. Une boucle for-in utilise le protocole NSFastEnumeration pour parcourir les éléments d'une collection. Vous envoyez donc un message à nil ce qui est sécurisé dans Objective-C.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X