美文网首页
NSEnumerator

NSEnumerator

作者: 蔡俊宇 | 来源:发表于2016-09-17 22:21 被阅读916次

    今天在无意中看到MBProgressHUD源码解析中有这么一段代码:
    + (MB_INSTANCETYPE)HUDForView:(UIView *)view {
    NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator];
    for (UIView *subview in subviewsEnum) {
    if ([subview isKindOfClass:self]) { return (MBProgressHUD *)subview; } }
    return nil;}
    我感觉对NSEnumerator算是比较陌生吧,然后查了一下,应该算是效能较高的一种遍历NSArray的方式,直接测试了一下,由于简单测试功能,速度方面感觉无明显效果.

    NSMutableArray<NSString *>* arr =  [NSMutableArray array];
    arr[0] = @"0";
    arr[1] = @"1";
    arr[2] = @"2";
    arr[3] = @"3";
    arr[4] = @"4";
    
    NSEnumerator* arrEnum =  [arr objectEnumerator];
    id object;
    while (object = [arrEnum nextObject]) {
        NSLog(object);
          操作
    }
    

    实际上,调用了objectEnumerator方法的时候,返回的是一个id类型的object,有时候在编译阶段还不知道具体是什么类的话,可以直接打印尝试一下,使用nextObject这个方法可以得到一个指针,要注意的是 使用这种方式遍历 遍历过程中不可以对数组进行增删操作 否则将会出现一些未知的错误

    另外,我们最常用的循环方式还有

    • 使用for循环加 count 方法遍历
      int i = 0;for(i = 0; i < [array count]; i++){
      [array objectAtIndex:i]
      操作
      }
    • 使用for in方式遍历
      for(NSString *str in array){
      操作
      }

    另外:其实这个感觉跟Java中的类的遍历非常相似:

    • Java中三种迭代是否能删除(由于本人正在学习Java,随便复习一下):
      • 普通for循环,可以删除,但是索引要--
      • 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
      • 增强for循环不能删除

    相关文章

      网友评论

          本文标题:NSEnumerator

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