<__NSArrayM: 0xa4fc000> was mutated while being enumerated.

崩溃信息:<__NSArrayM: 0xa4fc000> was mutated while being enumerated.

出现这个崩溃的原因通常是:在数组枚举的过程中,修改了数组的元素(比如:添加、删除、修改元素位置)。
for in实际上是快速枚举,常规遍历和for循环没有太大区别。但是枚举操作中有一条需要注意:对于可变数组进行枚举操作时,不能通过添加/删除对象等这类操作来改变数组容器,否则就会报错。根源在于:这种操作造成数组容器改变后,可能遍历到没有分配的位置,用for循环机制不能自己察觉,但是枚举器可以察觉。
Code1(不会崩溃):

NSMutableArray *muteArr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
    for (int i = 0; i <muteArr.count; i++) {
        NSLog(@"%@",muteArr[i]);
        if (i == 2) {
            // 有意思的是,这里addObject会无限循环添加下去
            [muteArr addObject:@"4"];
        }
    }
    NSLog(@"muteArr:%@",muteArr);

Code2(会崩溃):

NSMutableArray *muteArr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
    for (NSString *obj in muteArr) {
        NSLog(@"%@",obj);
        [muteArr addObject:@"4"];
    }
    NSLog(@"muteArr:%@",muteArr);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容