iOS 遍历数组crash— <__NSArrayM: 0x**
2020-03-20 本文已影响0人
时米高的人生笔记
控制台输出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]; } } }];