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];
                }
             }
        }];
    
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容