iOS的foreach执行原理
巴扎黑
巴扎黑 2017-04-17 11:43:53
[iOS讨论组]

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

巴扎黑
巴扎黑

全部回复(2)
黄舟

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

大家讲道理

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号