<__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 

Code2(会崩溃):

NSMutableArray *muteArr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
    for (NSString *obj in muteArr) {
        NSLog(@"%@",obj);
        [muteArr addObject:@"4"];
    }
    NSLog(@"muteArr:%@",muteArr);

你可能感兴趣的:(<__NSArrayM: 0xa4fc000> was mutated while being enumerated.)