Где я должен использовать цикл for
и где я должен использовать цикл for in
?
Я хотел бы узнать разницу между ними.
Где я должен использовать цикл for
и где я должен использовать цикл for in
?
Я хотел бы узнать разницу между ними.
Традиционный для цикла в 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, так как код работает быстрее, чем делать то же самое с традиционным для цикла.
Надеюсь, что это поможет.
Вы имеете в виду быстрое перечисление? Вы сомневаетесь, что неясно.
Нормальная для цикла будет выглядеть примерно так:
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
}
Имейте в виду, что вы не можете изменить массив, который используете в быстром перечислении, таким образом не удаляя и не добавляя при использовании быстрого перечисления