web-dev-qa-db-fra.com

Boucle For en Objective-C

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

J'aimerais connaître la différence entre eux.

50
suman

La boucle for traditionnelle dans Objective-C est héritée de la norme C et se présente comme suit:

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 permet de parcourir en boucle les objets d'une collection, telle qu'une instance de NSArray. Par exemple, pour parcourir en boucle une collection d'objets NSString dans un tableau NSArray et les imprimer tous, vous pouvez utiliser le format suivant.

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

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

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

L'avantage d'utiliser la boucle in est tout d'abord que le code est beaucoup plus propre. Deuxièmement, le compilateur Objective-C peut optimiser la boucle for in afin que le code soit plus rapide que de faire la même chose avec une boucle for traditionnelle.

J'espère que cela t'aides.

116
James Bedford

Vous voulez dire énumération rapide? Votre question est très peu claire.

Une boucle normale pourrait ressembler à 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 changer le tableau que vous utilisez en énumération rapide, donc pas de suppression ni d'ajout lors de l'utilisation d'une énumération rapide.

8
Antwan van Houdt