随着iOS的不断发展,apple也不断推出性能更高的数组遍历方式,下面将对熟悉的五种遍历方式进行列举。

首先定义一个数组,并获取数组长度

    NSArray *array=@[@"",@"",@"",@"",@"",@"",@"",@"",@"",];
NSInteger count =array.count;

一、for循环

for (NSInteger i=; i<count; i++) {
NSLog(@"%@----%@",array[i],[NSThread currentThread]);
} 打印结果如下:
-- ::01.537 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.538 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.539 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.539 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.539 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.540 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.540 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.540 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.541 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
-- ::01.541 MyTestWorkProduct[:] end

二、forin 快速枚举

 for (NSString *string in array) {
NSLog(@"%@----%@",string,[NSThread currentThread]);
} 打印结果如下:
-- ::01.990 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.990 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.991 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.992 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.992 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.993 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.993 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.993 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.994 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
-- ::01.994 MyTestWorkProduct[:] end

三、NSEnumerator

 NSEnumerator *enumer=[array objectEnumerator];
id obj;
while (obj=[enumer nextObject]) {
NSLog(@"%@----%@",obj,[NSThread currentThread]);
}
打印结果如下:
-- ::37.138 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.139 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.140 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.140 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.140 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.141 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.141 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.141 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.142 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
-- ::37.142 MyTestWorkProduct[:] end

四、快速遍历

//顺序遍历
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@----%@",array[idx],[NSThread currentThread]);
}];
//倒序遍历
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@----%@",array[idx],[NSThread currentThread]);
}];
打印结果如下:
-- ::30.774 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.775 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.775 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.776 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.777 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.778 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.778 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.779 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.779 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.780 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.781 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.781 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.782 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.782 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.783 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.784 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.785 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.786 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
-- ::30.786 MyTestWorkProduct[:] end

五、快速迭代

//将block中的任务,逐个放到queue中,然后进行dispatch_sync执行
//多线程同步循环 dispatch_queue_t queue =dispatch_queue_create("apply并行队列", DISPATCH_QUEUE_CONCURRENT);
dispatch_apply(count, queue, ^(size_t index) {
NSLog(@"%@----%@",array[index],[NSThread currentThread]);
});

NSLog(@"end");


打印结果如下:
-- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x60000006b940>{number = , name = main}
-- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x600000876cc0>{number = , name = (null)}
-- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x600000479a80>{number = , name = (null)}
-- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x60800067e740>{number = , name = (null)}
-- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x60000006b940>{number = , name = main}
-- ::00.115 MyTestWorkProduct[:] ----<NSThread: 0x600000876cc0>{number = , name = (null)}
-- ::00.115 MyTestWorkProduct[:] ----<NSThread: 0x600000479a80>{number = , name = (null)}
-- ::00.116 MyTestWorkProduct[:] ----<NSThread: 0x60800067e740>{number = , name = (null)}
-- ::00.116 MyTestWorkProduct[:] ----<NSThread: 0x60000006b940>{number = , name = main}
-- ::00.116 MyTestWorkProduct[:] end

根据打印结果最后才打印 end 字符可知,dispatch_apply会等待每个block中的任务都执行完成后,才往下执行。

总结:从这五种遍历方式来看,第5种采用的多线程,对于处理耗时的数组遍历比较适用。

iOS开发中数组常用的五种遍历方式的更多相关文章

  1. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  2. Java中List集合的三种遍历方式(全网最详)

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...

  3. lua中for循环的四种遍历方式

    lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3   key,value pairs 取每一 ...

  4. JS 开发中数组常用的方法

    大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...

  5. iOS开发中的常用宏定义

    在iOS开发的过程中合理的使用宏定义能够极大提高编码的速度,下面是一些常用的宏定义,部分内容来自互联网 Log // 调试状态, 打开LOG功能 #ifdef DEBUG #define GLLog( ...

  6. IOS开发中Xcode常用插件安装与管理(转)

    XCode中插件管理工具:Alcatraz    转自http://www.cocoachina.com/industry/20140506/8325.html 苹果现在的成绩得益于其始终如一的坚持. ...

  7. Java中的HashMap的2种遍历方式比较

    首先我们准备数据,准备一个map Map<String, String> map = new HashMap<String, String>(); for (int i = 0 ...

  8. Java中list对象的三种遍历方式

    1.增强for循环 for(String str : list) {//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用. System.out.println(str); ...

  9. IOS开发中针对UIImageView的几种常用手势

    // //  ViewController.m //  05-手势 // //  Created by wanghy on 15/9/21. //  Copyright (c) 2015年 wangh ...

随机推荐

  1. Unity3D将来时:WebGL

    作者:小玉链接:https://zhuanlan.zhihu.com/p/19974794来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 随着Unity5.0的发布,W ...

  2. VMware克隆虚拟机,克隆机网卡启动不了解决方案

    Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interfac ...

  3. Github 新的项目管理模式——Projects

    Github 新的项目管理模式--Projects Issues Github 中传统的项目管理是使用 issue 和 pull request 进行的,这部分内容不是本文重点,不再赘述. 但有一些功 ...

  4. Java程序,求学员的平均成绩

    第一步,系统提示输入学员的人数. 第二步,逐一获取学员的分数,并累计. 第三步,求平均成绩,并输出. import java.util.Scanner; public class chengji { ...

  5. 如何判断UIPanGestureRecognizer的拖动方向

    最近做一个项目,需要用到UIPanGestureRecognizer做一个侧滑菜单,需求是不能向右侧拖动(点击按钮右滑),但可以向左侧手势拖动收回:于是需要判断拖动的方向,百度了一下,网上大部分的答案 ...

  6. 创建Xml文件与修改Xml文件

    /// <summary> /// 修改节点 /// </summary> /// <param name="user">UserSafe 实体 ...

  7. H264与RTP

    http://blog.163.com/laorenyuhai126@126/blog/static/1935077920111218152989/

  8. U盘的不识别问题

    1.案例: 我重新装过电脑以后出现过一个问题是: 我的U盘只能在我电脑上用,在其他电脑上不能用 其他人的U盘不能在我的电脑上用. 2.根本问题: 是驱动问题.接口上没符合的驱动,未能指定路径.电脑上可 ...

  9. 01.WAMP搭建 [Win7+Apache2.4+MySQL5.7+PHP7

    WAMP搭建[Win7+Apache2.4+MySQL5.7+PHP7 一.背景 将电脑光驱位拆换成固态硬盘(120g),专门装了一个系统用于工作.之前一直使用PHPstudy和WAMP这种集成环境, ...

  10. NSThread 子线程 Cocoa NSOperation GCD(Grand Central Dispatch) 多线程

    单词:thread 英 θred:n 线.思路.vt 穿过.vi 穿透过 一.    进程.线程 进程:正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间 线程: ...