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

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

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

一、for循环

  1. for (NSInteger i=; i<count; i++) {
  2. NSLog(@"%@----%@",array[i],[NSThread currentThread]);
  3. }
  4.  
  5. 打印结果如下:
  6. -- ::01.537 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  7. -- ::01.538 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  8. -- ::01.539 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  9. -- ::01.539 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  10. -- ::01.539 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  11. -- ::01.540 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  12. -- ::01.540 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  13. -- ::01.540 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  14. -- ::01.541 MyTestWorkProduct[:] ----<NSThread: 0x600000260e80>{number = , name = main}
  15. -- ::01.541 MyTestWorkProduct[:] end

二、forin 快速枚举

  1. for (NSString *string in array) {
  2. NSLog(@"%@----%@",string,[NSThread currentThread]);
  3. }
  4.  
  5. 打印结果如下:
  6. -- ::01.990 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  7. -- ::01.990 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  8. -- ::01.991 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  9. -- ::01.992 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  10. -- ::01.992 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  11. -- ::01.993 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  12. -- ::01.993 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  13. -- ::01.993 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  14. -- ::01.994 MyTestWorkProduct[:] ----<NSThread: 0x60000007a400>{number = , name = main}
  15. -- ::01.994 MyTestWorkProduct[:] end

三、NSEnumerator

  1. NSEnumerator *enumer=[array objectEnumerator];
  2. id obj;
  3. while (obj=[enumer nextObject]) {
  4. NSLog(@"%@----%@",obj,[NSThread currentThread]);
  5. }
  6. 打印结果如下:
  7. -- ::37.138 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  8. -- ::37.139 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  9. -- ::37.140 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  10. -- ::37.140 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  11. -- ::37.140 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  12. -- ::37.141 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  13. -- ::37.141 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  14. -- ::37.141 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  15. -- ::37.142 MyTestWorkProduct[:] ----<NSThread: 0x608000078980>{number = , name = main}
  16. -- ::37.142 MyTestWorkProduct[:] end

四、快速遍历

  1. //顺序遍历
  2. [array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  3. NSLog(@"%@----%@",array[idx],[NSThread currentThread]);
  4. }];
  5. //倒序遍历
  6. [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  7. NSLog(@"%@----%@",array[idx],[NSThread currentThread]);
  8. }];
  9. 打印结果如下:
  10. -- ::30.774 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  11. -- ::30.775 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  12. -- ::30.775 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  13. -- ::30.776 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  14. -- ::30.777 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  15. -- ::30.778 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  16. -- ::30.778 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  17. -- ::30.779 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  18. -- ::30.779 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  19. -- ::30.780 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  20. -- ::30.781 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  21. -- ::30.781 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  22. -- ::30.782 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  23. -- ::30.782 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  24. -- ::30.783 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  25. -- ::30.784 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  26. -- ::30.785 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  27. -- ::30.786 MyTestWorkProduct[:] ----<NSThread: 0x600000070240>{number = , name = main}
  28. -- ::30.786 MyTestWorkProduct[:] end

五、快速迭代

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

NSLog(@"end");

  1.  
  2. 打印结果如下:
  3. -- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x60000006b940>{number = , name = main}
  4. -- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x600000876cc0>{number = , name = (null)}
  5. -- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x600000479a80>{number = , name = (null)}
  6. -- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x60800067e740>{number = , name = (null)}
  7. -- ::00.114 MyTestWorkProduct[:] ----<NSThread: 0x60000006b940>{number = , name = main}
  8. -- ::00.115 MyTestWorkProduct[:] ----<NSThread: 0x600000876cc0>{number = , name = (null)}
  9. -- ::00.115 MyTestWorkProduct[:] ----<NSThread: 0x600000479a80>{number = , name = (null)}
  10. -- ::00.116 MyTestWorkProduct[:] ----<NSThread: 0x60800067e740>{number = , name = (null)}
  11. -- ::00.116 MyTestWorkProduct[:] ----<NSThread: 0x60000006b940>{number = , name = main}
  12. -- ::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. javascript里面的数组,json对象,动态添加,修改,删除示例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. Android 时间维护服务 TimeService(针对于特殊定制设备)

    此方法针对于无法自动获取网络时间的特殊设备,正常 Android 设备直接调用 System.currentTimeMillis(); 方法获取当前时间即可. TimeService 集成于 Serv ...

  3. 解决Web部署 svg/woff/woff2字体 404错误

    在IIS上部署web项目的时候,发现浏览器报找不到woff.woff2字体的错误,导致浏览器加载字体报404错误,由于服务器IIS不认SVG,WOFF/WOFF2 这几个文件类型,只要在IIS上添加M ...

  4. http://blog.csdn.net/chenriwei2/article/details/38047119

    SSP或者说是空间金字塔匹配(spatial pyramid matching or SPM)是BoW的一个扩展,它把一张图片划分为从不同的分辨率级别然后聚合这些不同分辨率的图像,在深度学习之前SPM ...

  5. iOS Developer:真机测试

    如果出现ios development一项为灰色不可点击状态,苹果的说法是 如果您要为此电脑添加证书,请revoke以前的证书后添加,或者通过以前的mac导出证书 原文不记得了,大概这个意思,苹果不希 ...

  6. 企业搜索引擎开发之连接器connector(二十九)

    在哪里调用监控器管理对象snapshotRepositoryMonitorManager的start方法及stop方法,然后又在哪里调用CheckpointAndChangeQueue对象的resum ...

  7. Shiro权限验证代码记录,正确找到shiro框架在什么地方做了权限识别

    权限验证方式的验证代码: org.apache.shiro.web.servlet.AdviceFilter这个类是所有shiro框架提供的默认权限验证实例类的父类 验证代码: public void ...

  8. HtmlAgilityPack中通过sibling才能得到对应的InnerText和form,option等tag的子节点

    [背景] 之前使用HtmlAgilityPack期间,遇到了2个bug: 1. InnerText没有包含对应字符串(但是用NextSibling.InnerText却可以得到) 对于html: ? ...

  9. [Xamarin] 取得所有已安裝軟體清單 (转帖)

    最近會用到,簡單記錄一下,抓取所有該手機已經安裝的軟體清單 結果圖: 首先介紹一下Layout :  \Resources\Layout\Main.axml <?xml version=&quo ...

  10. file /usr/share/mysql/... conflicts with file from package mysql-libs-5.1.73-3.el6_5.x86_ 64 MySQL安装

    在CentOS 6.5安装MySQL 5.6.17,安装到最后一个rpm文件MySQL-server时 安装命令是:rpm -ivh MySQL-server-5.6.17-1.el6.x86_64. ...