迭代器设计模式

2016-05-18  本文已影响45人  曲终人散Li

迭代器设计模式的作用是:提供一种方法去访问集合对象中的元素,但是又不对外暴露底层的结构和实现细节。使得遍历集合元素的功能从集合对象本身转移到迭代器对象。

iOS上实现迭代器模式的方法:
1.NSEnumerator类,它是Foundation.framework中的一个类,遵循了NSFastEnumeration协议,需要实现- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len;方法。
使用方法如下:
NSArray *carArray = @[@"轩逸", @"奥迪Q5", @“传祺gs4”,@“雷凌”];
NSEnumerator *itemEnumerator = [carArray objectEnumerator];
NSString *carItem;
while (carItem = [itemEnumerator nextObject]) {
NSLog(@“current carItem = %@", carItem);
}

2.NSDictionary NSArray NSSet中的
-(void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);方法,从apple文档可以看出这个方法是iOS4及以上版本才支持。
使用方法如下:
NSArray *carArray = @[@"轩逸", @"奥迪Q5", @“传祺gs4”,@“雷凌”]; [carArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"carArray = %@", obj);
}];

  1. NSArray NSSet中的实例方法

4.快速枚举,使用for枚举循环,比传统的基于索引的for循环高效。它是使用指针运算,相对比NSEnumerator高效。用于快速遍历的集合类需要遵循NSFastEnumeration协议。
使用方法如下:
NSArray *carArray = @[@"轩逸", @"奥迪Q5", @“传祺gs4”,@“雷凌”];
for(id car in carArray){
NSLog(@"carArray = %@", car);
}

上一篇下一篇

猜你喜欢

热点阅读