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 ...
随机推荐
- 脚本tips
脚本中所有的命令都要echo到log文件里,方便跟踪. grep的时候要小心grep出多行,正则表达式的匹配越精确越好!
- BZOJ1742[Usaco2005 nov]Grazing on the Run
Description John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我们可 以认为草地是一个数轴上的一些点.Joseph看到这些草非常兴奋, ...
- 1306. Sorting Algorithm 2016 12 30
1306. Sorting Algorithm Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description One of the f ...
- JavaScript-事件坐标
事件坐标: 1.参照屏幕左上角e.screenX,e.screenY 2.参照文档显示区左上角:e.clientX||e.x , e.clientY||e.y 3.参照所在父元素的左上角:e.offs ...
- PSP&进度条
11号 类别 开始时间 结束时间 间隔 净时间 燃尽图 8::00 8:20 0 20分钟 站立会议 8:20 8:50 0 30分钟 读构建之法 9:20 13:20 120分钟 120分钟 四人小 ...
- M1M2总结
这个学期很开心可以和一帮兄弟姐妹们一起做软件写代码,总体看下来真的是充满哦了艰辛和困苦.虽然我是负责软件测试的这一块的,但是看着他们辛苦的写代码我也很是为他们着急和心疼.毕竟,编译当头,数据库辅助,每 ...
- VIM使用(二) 浏览内核源代码
为了实现类似SourceInsight功能,通过VIM+Ctags+Cscope+Taglist+Source Explore +NERD Tree实现. 一, 安装插件 1)安装Ctags 和Csc ...
- cocos2d-x项目实现android视频播放参考链接
http://blog.csdn.net/xiaominghimi/article/details/6870259 http://blog.csdn.net/kaitiren/article/deta ...
- 用canvas制作酷炫射击游戏--part2
今天这一部分主要讲游戏的实现原理与游戏循环的代码实现. 先说原理,大家都看过动画吧.在我看来,游戏就是玩家能人为控制动画剧情发展方向的动画.所以,我们的游戏引擎其实说白了就是个动画引擎再加上鼠标事件. ...
- 打包java项目为可执行程序(exe)
一直都是编写了java程序后在控制台 javac --> java 命令运行,或者在eclipse中运行,今天突然想怎么可以写好了一个项目随处可以运行呢? 于是网上搜了步骤,跟着一步一步实现了, ...