您的位置:首页 > 移动开发 > IOS开发

iOS开发中遍历方式 (有借鉴)

2016-06-24 17:56 344 查看
统一使用:NSArray *array= @[@"1",@"2",@"3"];

1 for循环   可反向遍历

   常用地方:遍历字典、数组、集合

 
           NSInteger arrayCount = [array
count];
              for (int i =
0; i<arrayCount; i++) {
                 NSString *obj = arrayM[i];
               NSLog(@"%@",obj);
    }

     优点:简单

     缺点:  因为在字典和集合内部是无序排序,所以在遍历的时候需要用到一个新的数组当做中介,增加了开销。

     特点:1.只有满足条件  循环才会执行     2.死循环会一直执行下去,除非强制退出  3.碰到continue则跳出本次循环,继续下一次判断,条件成立执行循环
             4.碰到break无论条件是否满足,循环立刻结束    5.continue和break跳出的都是当前所在的循环作用域,如果外层有循环不受影响

2  NSEnumerator 遍历   可反向遍历

 
常用地方:类似for循环

   
NSEnumerator *arrayEnumerator = [array
objectEnumerator];
     NSString *obj;
     while ((obj = [arrayEnumerator
nextObject]) != nil) { 
              
NSLog(@"%@",obj); }

     优点:对于不同的数据类型,遍历的语法相似;内部可以简单的通过reverseObjectEnumerator设置进行反向遍历
     缺点:代码量稍大 
 
3 for ....  in循环快速遍历    可反向遍历
      常用地方:和for循环类似
      
      for (id object in  array){
           Nslog{}
      }
     优点:1语法简洁   2效率最高

    缺点:无法取得当前遍历操作所针对的下标

 
  注意点 :for in快速枚举
NSMutableArray
这类可变对象时要注意不能对容器进行修改,否则会导致遍历器抛出异常导致程序崩溃。

4基于block的遍历方式
 可反向遍历

 
    [array
enumerateObjectsUsingBlock:^(id 
_Nonnull
obj, NSUInteger
idx, BOOL
* _Nonnull
stop) 

        NSLog(@"");
     }];
       优点:1 遍历时可以直接从block中获得需要的所有信息,包括下标、值等。特别相对于字典而言,不需要做多余的编码即可同时获得key和value的值。         2能够直接修改block中key或者obj的类型为真实类型,可以省去类型转换的工作。 3可以通过NSEnumerationConcurrent枚举值开启并发迭代功能。
      说明:基于Block的遍历方式在实现反向遍历的时候也非常简单,使用enumerateObjectsWithOptions方法,传递NSEnumerationReverse作为参数即可,在处理遍历操作的时候推荐基于Block的遍历方式。

5 使用GCD中的dispatch_apply函数
     
          dispatch_queue_t queue =
dispatch_get_global_queue(0,
0);
                dispatch_apply(array.count, queue, ^(size_t index) {
                 NSLog(@"%@--%@",array[index],[NSThread
currentThread]);
           }); 
       优点:开启多线程并发处理遍历任务,执行效率高。
       缺点:1对于字典和集合需要借助数组  2 无法反向遍历
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios ios遍历方法