For循环在Objective-C中
我应该在哪里使用for
循环,我应该在哪里使用for in
循环?
我想知道他们之间的区别。
Objective-C中传统的for循环是从标准Cinheritance而来的,格式如下:
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循环是在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 }
请记住,您不能更改快速枚举中使用的数组,因此在使用快速枚举时不会删除或添加