iOS的foreach执行原理

我用for。。in的方式去遍历一个NSMutableArray,但是当遍历的时候,改变array,就会导致crash。看解释说是因为改变元素的时候,之前的元素全部被失效,但是想知道实现的具体原理。

请输入图片描述

阅读 5.2k
2 个回答

记得书上好像说的是为了安全,遍历的时候内部会转换成NSeArray操作吧。

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题