fast enumeration/快速枚举

来源:互联网 发布:知乎 sony电视推荐 编辑:程序博客网 时间:2024/06/06 08:25

当我们在进行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循环(第一种方式)。


0 0