for循环报错 (was mutated while being enumerated.')

 今天遇到一个我自己不常见的问题随手记一下如下:


*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7ae683e0> was mutated while being enumerated.'

查资料原因是在遍历时修改了数组原来数组及在同一时间,不同的线程同时读取和修改了数组,总结两种比较直接的解决方法

第一种是可以通过或arrayWithArray:或先定义数组再重新定义一个新的一样的数组,及将需要遍历的和需要的删除的数组分开如下:

for循环报错 (was mutated while being enumerated.')_第1张图片
上面的方法如果只需匹配一个值的请情况下可以在删除后跳出循环也可以


第二种是通过使用block块遍历原数组如下:

for循环报错 (was mutated while being enumerated.')_第2张图片

还有说用线程操作,个人感觉不太现实或许是我没有想起来,如果有别的方法还望指教。另外只是随手记一下,和大家分享,可指教勿喷,

你可能感兴趣的:(for循环报错 (was mutated while being enumerated.'))