最近在做一个应用时,测试时发现一个我写的控制器控制节点出现了问题,开始报NSGenericException错误,日志报的原因时迭代遍历元素时,元素被改变了,一开始我认为是线程同步出了问题,所以把迭代过程用线程锁保护了起来,但是发现问题依旧,然后开始不停查资料,最终发现问题居然在控制器为节点发消息的循环上。
原因就在这 "foreach",它的内部遍历使用了类似 Iterator进行迭代遍历,一旦元素变动,之前的元素全部被失效,所以在foreach的循环当中,最好不要去进行元素的修改动作,若需要修改,循环改为for遍历,由于内部机制不同,不会产生修改后结果失效的问题。
总结一下:遍历元素时,若需要修改原元素,不要使用foreach,而使用for循环。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。