当我们在进行iOS开发的过程中需要使用for循环语句时,一般有以下两种方式:
1⃣️
for (initialization; condition; increment) {
statements
}
2⃣️
for (type *object in collection) {
statements
}
第一种方式为常规方式,我们在C、C++、Java等都能看见它的使用,加入我们初始化一个数组后,需要遍历该数组,使用第一种方式的代码为:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建一个NSMutableArray对象,并使用items变量保存该对象的地址
NSMutableArray *items = [[NSMutableArray alloc] init];
//向items所指向的NSMutableArray对象发送addObject:消息
//每次传入一个字符
[items addObject:@"Bao"];
[items addObject:@"Shi"];
[items addObject:@"Long"];
//继续向同一个对象发送消息,这次是insertObject: atIndex:
[items insertObject:@"Zero" atIndex:0];
//遍历items数组中的每一个item
for( int i = 0; i < [items count]; i++) {
NSString *item = [items objectAtIndex:i];
NSLog(@"%@", item);
}
//释放items所指向的NSMutableArray对象
items = nil;
}
return 0;
}
但是Objective-c提供了一种更好的遍历数组的语法,称为快速枚举(fast enumeration)。快速枚举比传统的for循环(上文中介绍的第一种)更加简洁,而且更加的不容易出错,并且经过编译器的优化,通常比一般的for循环更快。如下:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建一个NSMutableArray对象,并使用items变量保存该对象的地址
NSMutableArray *items = [[NSMutableArray alloc] init];
//向items所指向的NSMutableArray对象发送addObject:消息
//每次传入一个字符
[items addObject:@"Bao"];
[items addObject:@"Shi"];
[items addObject:@"Long"];
//继续向同一个对象发送消息,这次是insertObject: atIndex:
[items insertObject:@"Zero" atIndex:0];
//遍历items数组中的每一个item
for (NSString *item in items) {
NSLog(@"%@", item);
}
//释放items所指向的NSMutableArray对象
items = nil;
}
return 0;
}
怎么样,对比了以上两种方法是不是感觉第二种方式(快速枚举)更加的简洁、方便、好看呢?
但是快速枚举有自己的限制:
如果需要在循环体中添加或删除对象,就不能使用快速枚举,否则程序会抛出异常。这时只能设置计数器并使用普通的for循环(第一种方式)。