Подтвердить что ты не робот

Для цикла в Objective-C

Где я должен использовать цикл for и где я должен использовать цикл for in?

Я хотел бы узнать разницу между ними.

4b9b3361

Ответ 1

Традиционный для цикла в Objective-C наследуется от стандарта C и принимает следующий вид:

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

Например, чтобы напечатать числа от 1 до 10, вы можете использовать цикл for:

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

С другой стороны, цикл for in был введен в Objective-C 2.0 и используется для циклического перемещения объектов в коллекции, таких как экземпляр NSArray. Например, чтобы прокрутить коллекцию объектов NSString в NSArray и распечатать их все, вы можете использовать следующий формат.

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

Это логически эквивалентно следующему традиционному циклу:

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

Преимущество использования цикла for for во-первых заключается в том, что для него требуется гораздо более чистый код. Во-вторых, компилятор Objective-C может оптимизировать цикл for in, так как код работает быстрее, чем делать то же самое с традиционным для цикла.

Надеюсь, что это поможет.

Ответ 2

Вы имеете в виду быстрое перечисление? Вы сомневаетесь, что неясно.

Нормальная для цикла будет выглядеть примерно так:

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

И цикл с быстрым перечислением, оптимизированный компилятором, будет выглядеть так:

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

Имейте в виду, что вы не можете изменить массив, который используете в быстром перечислении, таким образом не удаляя и не добавляя при использовании быстрого перечисления