一 效率:

for VS for(... in ...)

  1. for 的应用范围广基本可以NSArray、NSArray以及C语言的数组等,而for(... in ...)仅限于NSArray、NSArray等
  2. for(... in ...) 更简洁、效率更高

测试代码:

  10^7 的数组,时间单位 秒,精确度 毫秒

  1. NSMutableArray *test = [NSMutableArray array];
  2. for (int i= 0; i < 10000000; i++) {
  3. [test addObject:@(i)];
  4. }
  5. int sum = 0;
  6. double date_s = CFAbsoluteTimeGetCurrent();
  7. for (int i = 0;i < test.count; i++) {
  8. sum += 1;
  9. }
  10. double date_e =  CFAbsoluteTimeGetCurrent();
  11. NSLog(@"ForLoop Time: %f", date_e - date_s);
  12. date_s =  CFAbsoluteTimeGetCurrent();
  13. for (id obj in test) {
  14. sum += 1;
  15. }
  16. date_e =  CFAbsoluteTimeGetCurrent();
  17. NSLog(@"Enumeration Time: %f", date_e - date_s);

测试结果:

考虑到实际情况,ForLoop 的操作较多些。

二 所用的区别
for循环主要用在你已经知道了循环的次数或者可以明确的得到的循环次数
比如你要在屏幕上打出100个"hello word!" 或者 循环某个数组中的全部内容 
那么就可以用for (int i=0;i<100,i++)  for (int i = 0; i < array.count; i ++)
这里你已经很明确了是100 或者得到的array的数组个数
for in循环主要是方便遍历已经知道对象类型的数组
同时不关心索引的情况
比如已经知道数组里都是uibutton
那么你就可以直接用
for uibutton *tmpbutton in array
这样你就可以直接通过tmpbutton直接访问数组里的每一个button
另外数组还有一种用block遍历的方法
1                 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
2                     //.....
3                 }];

这种方法有一个要注意的地方就是可能会有异步执行的问题
最后这三种遍历方式是for in的效率是最高的
--------------------------------------------------------------------------------------------
for in 循环遍历比for更高级一些,当你数组里面的元素对象都一样,就可以用for in进行遍历,进行接受的对象跟数组里面所存储的是同一种类型

三  注意事项

如果在for in 循环里,对这个数组进行了修改的话,无论是增,删,修改数组元素位置,都会扔一个异常出来,错误是被遍历的数组已被销毁(<__NSArrayM: 0xa4fc000> was mutated while being enumerated.),比如以下代码:

NSMutableArray* arr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];

for (NSString* str in arr) {

if ([str isEqualToString:@"1"] || [str isEqualToString:@"5"]) {

[arr addObject:@"4"]; //或者  [arr removeObject:@"1"]; 或者 [arr exchangeObjectAtIndex:0 withObjectAtIndex:2];

continue;

}

}

原因: 

for in实际上是快速枚举,跟for循环意义上还是有区别的。

NSArray的枚举操作中有一条需要注意:对于可变数组进行枚举操作时,你不能通过添加或删除对象这类操作来改变数组容器。如果你这么做了,枚举器会很困惑,而你将得到未定义的结果。

而本身这种操作也是有问题的,数组容器已经改变,可能遍历到没有分配的位置,用for循环机器不能自己察觉,但是枚举器可以察觉。

追加,这个错误(<__NSArrayM: 0xa4fc000> was mutated while being enumerated.)的意思是:枚举的过程中数组发生了突变

转载于:https://www.cnblogs.com/LoveStoryJX/p/6547764.html

iOS for 和 forin 的区别 以及注意事项相关推荐

  1. 相同点安卓和iosui的相同点_学UI设计必要分清iOS和Android的设计区别

    原标题:学UI设计必要分清iOS和Android的设计区别 不同平台的设计和开发感觉像是在不同的国家之间旅行.你要做同样的吃吃睡睡看景点的事情,但是这些国家的风俗习惯社会制度会制约你如何吃吃睡睡游览景 ...

  2. iOS @2x @3x图的区别和理解

    苹果官方网页介绍: Icons and Images - Apple Developer iOS用于在屏幕上放置内容的坐标系统是基于点的度量,点映射到屏幕上的像素.标准分辨率显示器的像素密度为1:1( ...

  3. Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项

    Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...

  4. 英文破折号、连接号、连字符、负号的区别,注意事项和输入方法

    英文破折号.连接号.连字符.负号的区别,注意事项和输入方法 En dash MS Word中输入2013,在按Alt+X Em dash MS Word中输入2014,在按Alt+X

  5. iOS开发用Eventkit向日历和提醒事项中加入事件和闹铃

    iOS开发用Eventkit向日历和提醒事项中加入事件和闹铃 直接上代码说明如何使用,后面有详细的介绍 主要使用Eventkit事件库的EKEventStore类 该类负责日历和提醒事件的管理,可以简 ...

  6. 动态代理jdk和cglib区别、注意事项(private,static,final)、spring aop原理

    文章目录 一.代理简聊 二.静态代理 三.动态代理 1.jdk动态代理 2.cglib动态代理 四.动态代理总结.注意事项 1.jdk动态代理与cglib的区别. 2.注意事项及分析. 五.aop原理 ...

  7. 简单从开发者角度谈谈iOS与安卓开发的区别

    前言 时间到了2019年,移动应用开发不再是以前绝对的香饽饽,大浪淘沙,凡是很容易被取代的职业都会贬值,程序员也是如此 所以,作为移动应用开发者,还是应该努力提高自己的姿势水平,技术越高越不可替代嘛 ...

  8. ios跟android有什么区别,ios 系统和安卓系统在交互层面上有何区别?

    大家来谈谈 ios 系统和安卓系统在交互层面上的区别? 主要是想区别下 ios 系统和安卓系统在交互上的不同点,也可以是 ui 视觉上的区别 絮 #oRA 昨天 18:13 1. 导航逻辑差异 ios ...

  9. iOS 堆和栈的区别?

    前言 堆和栈是什么?有什么区别?是干嘛的?啥东西呀这是?别急,慢慢看下去 内存管理 移动设备的内存及其有限,每一个APP所能占用的内存是有限制的 (吐槽一下:iPhone6s还是16G起步,还好我也买 ...

最新文章

  1. 298.2亿美元的机器人市场,为什么过得有点“惨”
  2. integer加1_AP双语数学常用的术语(1)
  3. 几种 ETL 工具的比较(Kettle,Talend,Informatica 等)
  4. linux下c语言tcp文件传输,C语言实现TCP通信
  5. Spring的定时任务
  6. has install-snap change in progress问题
  7. EXP-00056遇到Oracle错误1455问题解决办法
  8. WinDbg / SOS Cheat Sheet
  9. 54. Attribute isId 属性
  10. 微服务 前台调用后台的慢的原因_也只有阿里P8出身的他能把SpringCloud微服务架构商城项目整的这么干了...
  11. 用电脑上的计算器计算反三角函数
  12. 2.3 OverFeat
  13. 相机投影变换(位姿)
  14. Go初始化变量的招式
  15. Hibernate自动建表
  16. 【C语言】让你不再害怕指针——C指针详解(经典,非常详细)
  17. VUE组件通信的使用
  18. excel考试知识点计算机二级,全国计算机二级等级考试Excel要点考点归纳.doc
  19. 使用ps制作账号管理页面
  20. 五年级计算机课做什么电子报,电子工业版五年级信息技术5册教案1、小报版面先设计...

热门文章

  1. 学习前端开发,自学真的能成功?
  2. 【C语言】在线OJ题 BC72-BC87-牛客网编程初学者入门训练
  3. python自动化框架pytest pdf_Python自动化测试框架-pytest,python
  4. 四边形内接于圆定理_2020中考几何秘籍:初中最全几何定理和解题思路
  5. windows服务器迁到_将文件服务器及域控制器从2003迁移至Windows Server 2008 R2
  6. 【cv2】:关于opencv-Python的函数
  7. python解决LeetCode精选Hot100
  8. 如何在本地管理和切换多个 github 账号?
  9. 用最简单直白的人类语言解释下jsonP到底是什么鬼
  10. 第一章 软件项目管理概述