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* 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)