iOS开发中数组常用的五种遍历方式
随着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开发中数组常用的五种遍历方式的更多相关文章
- IOS开发中数据持久化的几种方法--NSUserDefaults
IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...
- Java中List集合的三种遍历方式(全网最详)
List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...
- lua中for循环的四种遍历方式
lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3 key,value pairs 取每一 ...
- JS 开发中数组常用的方法
大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...
- iOS开发中的常用宏定义
在iOS开发的过程中合理的使用宏定义能够极大提高编码的速度,下面是一些常用的宏定义,部分内容来自互联网 Log // 调试状态, 打开LOG功能 #ifdef DEBUG #define GLLog( ...
- IOS开发中Xcode常用插件安装与管理(转)
XCode中插件管理工具:Alcatraz 转自http://www.cocoachina.com/industry/20140506/8325.html 苹果现在的成绩得益于其始终如一的坚持. ...
- Java中的HashMap的2种遍历方式比较
首先我们准备数据,准备一个map Map<String, String> map = new HashMap<String, String>(); for (int i = 0 ...
- Java中list对象的三种遍历方式
1.增强for循环 for(String str : list) {//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用. System.out.println(str); ...
- IOS开发中针对UIImageView的几种常用手势
// // ViewController.m // 05-手势 // // Created by wanghy on 15/9/21. // Copyright (c) 2015年 wangh ...
随机推荐
- PostMan插件安装
一直没装上postman,今天运气好,竟装上了 给大家show一下吧,也希望大家跟我一样走弯路甚至于走不过去!:) 1.下载Postman_v4.1.3.rar,这个是我测试验证并打包的: 加QQ群: ...
- Maven使用第三方jar文件的两种方法
转于http://blog.csdn.net/youhaodeyi/article/details/1729116 主要用于回查与标记 在Maven中,使用第三方库一般是通过pom.xml文件中定义的 ...
- 我与solr(一)--solr的配置与安装
感谢upxiaofeng的分享,转载自http://blog.csdn.net/zoubf/article/details/51505940 准备工作: 目前最新版本6.0.下载solr 6.0:So ...
- Bootstrap自带的一些预定义的按钮颜色
浅蓝色 btn-info 被用在那些用户可能会采取的操作上. 红色btn-danger被用来提醒用户该操作具有“破坏性”,例如删除一张猫的图片.
- arduino 入手
新买了个ardhuino 入门套件 1. Win7 Driver issue: Need to install the below drivers, because my windows is ins ...
- js基础知识:变量
一.什么是变量? 在JavaScript中,变量用来存放值的,存放任何数据类型的值都可以,它就是值的容器. 二.变量怎么用? (一)用var声明1个变量 在使用变量之前,需要var关键字来声明变量,变 ...
- springMVC注解启用及优化
使用注解的原因 最方便的还是启用注解 注解方便,而且项目中很流行. 配置文件尽量减少,主要使用注解方式. Springmvc的注解是在2.5版本后有了注解,如何开启注解配置文件 Web.xml文件中不 ...
- SSH框架的简单示例(执行流程)
本文转自一篇博文,感觉通俗易懂,适用于初学j2ee者,与大家一起分享 (一)struts框架部分 1.打开Myeclipse,创建一个web project,项目名称为TestSSH. 2.在web的 ...
- springmvc和struts2的差别
springmvc和struts2的区别相关内容 1.spring mvc的入口是servlet,而struts2是filter filter功能:用户可以改变一个request和修改一个resp ...
- Replication的犄角旮旯(五)--关于复制identity列
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...