美文网首页iOSiOS 开发iOS 高级开发
ios 遍历数组的八种方法

ios 遍历数组的八种方法

作者: 远0 | 来源:发表于2016-11-03 13:53 被阅读589次

    //第一种

    [arr enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop){

    NSLog(@"%ld,%@",idx,[arr objectAtIndex:idx]);

    }];

    //第二种

    dispatch_apply([arr count], dispatch_get_global_queue(0, 0), ^(size_t index){//并行

    NSLog(@"%ld,%@",index,[arr objectAtIndex:index]);

    });

    //第三种

    dispatch_apply([arr count], dispatch_get_main_queue(), ^(size_t index){//串行,容易引起主线程堵塞,可以另外开辟线程

    NSLog(@"%ld,%@",index,[arr objectAtIndex:index]);

    });

    //第四种

    for (NSString*str in arr) {

    NSLog(@"%@",str);

    }

    //第五种,do-while

    int i = 0;

    do {

    NSLog(@"%@",[arr objectAtIndex:i]);

    i++;

    } while (i<[arr count]);

    //第六种,while-do

    int j = 0;

    while (j<[arr count]) {

    NSLog(@"%@",[arr objectAtIndex:j]);

    j++;

    }

    //第七种,普通for循环

    for (int m = 0; m<[arr count]; m++) {

    NSLog(@"%@",[arr objectAtIndex:m]);

    }

    //第八种,NSEnumerator  (谢谢大刘124585858的补充)

    提供正反向遍历

    - (nullable ObjectType)nextObject;

    @property (readonly,copy) NSArray *allObjects;

    NSArray *iosArray = @[ @"I", @"O", @"S"];

    NSEnumerator *enumerator = [iosArray objectEnumerator];//正向遍历

    NSEnumerator *enumerator = [iosArray reverseObjectEnumerator];//反向遍历

    id object;

    while ((object = [enumerator nextObject]) != nil) {

    //处理枚举器中的数据

    NSLog(@"%@", object);

    }

    个人比较喜欢第一种方法

    注意:

    ① 其中第二种方法由于是并行,所以打印出来的东西是随机的,并不是按照顺序打印的

    ② 第三种容易引起主线程堵塞,所以最好自己另外创建一个线程

    ③ 本人学识浅,目前所知的就这几种,欢迎补充

    相关文章

      网友评论

      • AirSars:最好能比较下各种循环所需要的时间对比,我只知道forin循环比for循环快,第一种在数量比较大的时候效率很高
      • 大刘124585858:楼主没听过 NSEnumator么
        远0:@大刘124585858 是的。是还有这个方式,个人比较少用这种方式。谢谢你的补充,我等下更新一下。

      本文标题:ios 遍历数组的八种方法

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