我应该在哪里使用for
循环,而在哪里使用for in
循环?
我想了解它们之间的区别。
Objective-C中传统的for循环继承自标准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实例。例如,要循环遍历NSArray中的一组NSString对象并将它们全部打印出来,可以使用以下格式。
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 循环更快运行。
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
}
请记住,在使用快速枚举时,您不能更改正在使用的数组,因此不能添加或删除元素。
for (element in collection)
而不是for (element : collection)
。此外,collection
可以是任何实现了NSFastEnumeration
的对象。 - JeremyPNSArray *myArray = [self generateArray]; for (NSString *currentString in myArray)
和for (NSString *currentString in [self generateArray])
中,是否有明显的性能差异? - vivek241