iOS 遍历数组crash— <__NSArrayM: 0x***> was mutated while being enumerated

控制台输出crash 日志:
 Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7ae683e0> was mutated while being enumerated.'
crash代码
for (NSDictionary *dict in self.dataArray) {
    if ([dict[@"type"] intValue] == 1) {
        [self.dataArray removeObject:dict];
      }
}
crash 原因:
  • for循环遍历数组时,操作数组 removeObject,造成不同线程同时对数组进行读和写操作,引起crash;
解决方法:
  • 通过block块遍历数组

        [self.dataArray enumerateObjectsUsingBlock:^(NSDictionary * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
           if ([obj[@"type"] intValue] == 1) {
                *stop = YES;
                if (*stop) {
                    [self.dataArray removeObject:obj];
                }
             }
        }];
    
    

你可能感兴趣的:(iOS 遍历数组crash— <__NSArrayM: 0x***> was mutated while being enumerated)