NSEnumerator

今天在无意中看到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循环不能删除
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,461评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,954评论 18 399
  • 接下来的一段时间是我非常忙碌的日子,首先欧冠支持马竞干掉皇马,NBA总决赛看西部狂虐东部,法网看纳豆强势回归冲击赛...
    唐诗0525阅读 2,828评论 0 0
  • 超级英雄:守护者or毁灭者 超级英雄们的目标一直是打击罪犯,维护人类安全。但是,在他们坚持正义的背后确实无辜平民的...
    洛小柒阅读 3,480评论 2 1