在做项目需要遍历的数组的时候使用了这个
enumerateObjectsUsingBlock关于这个方法的优缺点其他文章中记录了很多这里不再多赘述 记录蛋疼的一点是遍历不全比如当你需要遍历数组中删除某些元素时使用如下方法你会发现不好使
- (void)enumerateObjectsUsingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block;
这个方法是正序的会让两个连在一起的元素无法完全删除 可以使用下面这个方法
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block;
其中NSEnumerationOptions参数是个枚举值
NSEnumerationReverse是通过倒叙的方式来遍历。
NSEnumerationConcurrent表示枚举块是并发进行
*** Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘*** Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.’
网上的解决办法是
NSMutableArray * arrayTemp = xxx;
NSArray * array = [NSArray arrayWithArray: arrayTemp];
for (NSDictionary * dic in array) {
if (condition){
[arrayTemp removeObject:dic];
}
}
还有一个解决办法就是使用enumerateObjectsWithOptions具体怎么取舍看个人,