Question Pour boucle en Objective-C


Où devrais-je utiliser le for boucle et où devrais-je utiliser le for in boucle?

Je voudrais savoir la différence entre eux.


41
2018-02-28 09:50


origine


Réponses:


La traditionnelle boucle for Objective-C est héritée du standard C et prend la forme suivante:

for (/* Instantiate local variables*/ ; /* Condition to keep looping. */ ; /* End of loop expressions */)
{
    // Do something.
}

Par exemple, pour imprimer les nombres de 1 à 10, vous pouvez utiliser la boucle for:

for (int i = 1; i <= 10; i++)
{
    NSLog(@"%d", i);
}

D'autre part, la boucle for in a été introduite dans Objective-C 2.0 et est utilisée pour parcourir des objets dans une collection, telle qu'une instance NSArray. Par exemple, pour parcourir une collection d'objets NSString dans un NSArray et les imprimer tous, vous pouvez utiliser le format suivant.

for (NSString* currentString in myArrayOfStrings)
{
    NSLog(@"%@", currentString);
}

Ceci est logiquement équivalent à la traditionnelle pour boucle suivante:

for (int i = 0; i < [myArrayOfStrings count]; i++)
{
    NSLog(@"%@", [myArrayOfStrings objectAtIndex:i]);
}

L'avantage de l'utilisation de la boucle for in est avant tout un code beaucoup plus propre à examiner. Deuxièmement, le compilateur Objective-C peut optimiser la boucle for in de sorte que le code s'exécute plus rapidement que de faire la même chose avec une boucle for traditionnelle.

J'espère que cela t'aides.


94
2018-02-28 10:02



Vous voulez dire un dénombrement rapide? Votre question est très floue.

Une boucle normale ressemblerait un peu à ceci:

unsigned int i, cnt = [someArray count];
for(i = 0; i < cnt; i++)
{ 
   // do loop stuff
   id someObject = [someArray objectAtIndex:i];
}

Et une boucle avec énumération rapide, optimisée par le compilateur, ressemblerait à ceci:

for(id someObject in someArray)
{
   // do stuff with object
}

Gardez à l'esprit que vous ne pouvez pas modifier le tableau que vous utilisez dans l'énumération rapide, donc sans suppression ni ajout lors de l'utilisation de l'énumération rapide


6
2018-02-28 10:04