黑马程序员技术交流社区

标题: OC中forin和for的区别 [打印本页]

作者: 杨光0618    时间: 2016-8-23 05:17
标题: OC中forin和for的区别
for in实际上是快速枚举,跟for循环意义上还是有区别的。

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

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


作者: 1358840521    时间: 2016-8-23 20:06
举个例子呗,最好敷个图
作者: 杨光0618    时间: 2016-8-23 23:18
本帖最后由 杨光0618 于 2016-8-23 23:19 编辑
1358840521 发表于 2016-8-23 20:06
举个例子呗,最好敷个图

forin报错的情况:

for循环无问题:

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



快速枚举for in和for循环在意义上还是有区别的

作者: 赵延达    时间: 2016-8-23 23:27
嗯哼,长见识了,谢谢分享。
作者: 1358840521    时间: 2016-8-24 19:05
杨光0618 发表于 2016-8-23 23:18
forin报错的情况:

for循环无问题:

给力给力




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2