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

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

50 голосов
/ 28 февраля 2011

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

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

Ответы [ 2 ]

115 голосов
/ 28 февраля 2011

Традиционный цикл for в 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:

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

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

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

8 голосов
/ 28 февраля 2011

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

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

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
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...