A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨光0618 中级黑马   /  2016-8-23 05:17  /  1640 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

你可以翻翻书,看看枚举。
NSArray的枚举操作中有一条需要注意:对于可变数组进行枚举操作时,你不能通过添加或删除对象这类操作来改变数组容器。如果你这么做了,枚举器会很困惑,而你将得到未定义的结果。
而本身这种操作也是有问题的,数组容器已经改变,可能遍历到没有分配的位置,用for循环机器不能自己察觉,但是枚举器可以察觉。
追加,这个错误(<__NSArrayM: 0xa4fc000> was mutated while being enumerated.)的意思是:枚举的过程中数组发生了突变
如果在for in 循环里,对这个数组进行了修改的话,无论是增,删,修改数组元素位置,都会扔一个异常出来,错误是被遍历的数组已被销毁(<__NSArrayM: 0xa4fc000> was mutated while being enumerated.

建议仅仅是遍历的话二者都可以,若使用的增删改的使用for循环。

4 个回复

倒序浏览
举个例子呗,最好敷个图
回复 使用道具 举报
本帖最后由 杨光0618 于 2016-8-23 23:19 编辑
1358840521 发表于 2016-8-23 20:06
举个例子呗,最好敷个图

forin报错的情况:

for循环无问题:

有时候因为元素的不同,forin也能执行成功:



快速枚举for in和for循环在意义上还是有区别的
回复 使用道具 举报
嗯哼,长见识了,谢谢分享。
回复 使用道具 举报
杨光0618 发表于 2016-8-23 23:18
forin报错的情况:

for循环无问题:

给力给力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马