美文网首页
迭代器设计模式

迭代器设计模式

作者: 曲终人散Li | 来源:发表于2016-05-18 11:39 被阅读45次

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

    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中的实例方法
    • (void)makeObjectsPerformSelector:(SEL)aSelector NS_SWIFT_UNAVAILABLE("Use enumerateObjectsUsingBlock: or a for loop instead");
      (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(nullable id)argument NS_SWIFT_UNAVAILABLE("Use enumerateObjectsUsingBlock: or a for loop instead");
      这两个方法在swift中不可用,让数组每一个元素都调用指定的aSelector方法,withObject:是传递给aSelector的参数。

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

    相关文章

      网友评论

          本文标题:迭代器设计模式

          本文链接:https://www.haomeiwen.com/subject/njhwrttx.html