对于Objective-C中的循环

sum*_*man 52 syntax objective-c

我应该在哪里使用for循环,我应该在哪里使用for in循环?

我想知道它们之间的区别.

Jam*_*ord 121

Objective-C中的传统for循环继承自标准C并采用以下形式:

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

例如,要打印1到10之间的数字,可以使用for循环:

for (int i = 1; i <= 10; i++)
{
    NSLog(@"%d", i);
}
Run Code Online (Sandbox Code Playgroud)

另一方面,for循环在Objective-C 2.0中引入,用于循环集合中的对象,例如NSArray实例.例如,要遍历NSArray中的NSString对象集合并将其全部打印出来,可以使用以下格式.

for (NSString* currentString in myArrayOfStrings)
{
    NSLog(@"%@", currentString);
}
Run Code Online (Sandbox Code Playgroud)

这在逻辑上等同于以下传统的for循环:

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

使用for in循环的优点首先是要查看更清晰的代码.其次,Objective-C编译器可以优化for循环,因为代码运行速度比使用传统for循环执行相同的操作更快.

希望这可以帮助.

  • @koregan:添加评论,让James在你改写问题时改变第一句话.您还可以添加评论,以便对非英语国家的人更加宽容...... (2认同)

Ant*_*udt 8

你的意思是快速枚举?你的问题很不清楚.

正常的for循环看起来有点像这样:

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

具有快速枚举的循环(由编译器优化)如下所示:

for(id someObject in someArray)
{
   // do stuff with object
}
Run Code Online (Sandbox Code Playgroud)

请记住,您无法在快速枚举中更改正在使用的阵列,因此在使用快速枚举时不会删除或添加