此代码运行时没有崩溃,我在文档中看不到任何内容,但它是否真的安全?
[mutableArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// do some stuff to obj before removing it
[mutableArray removeObject:obj];
}];
答案 0 :(得分:5)
我认为不应该。
在枚举中,对象被视为const。
我尝试了相同的代码,我收到了以下错误:
Collection <__NSArrayM: 0x10053b8d0> was mutated while being enumerated.
守则:
NSMutableArray *mutableArray=[NSMutableArray new];
[mutableArray addObject:@"A"];
[mutableArray addObject:@"Ab"];
[mutableArray addObject:@"Ac"];
[mutableArray addObject:@"Ad"];
[mutableArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// do some stuff to obj before removing it
[mutableArray removeObject:obj];
NSLog(@"--->%@",mutableArray);
}];
答案 1 :(得分:5)
这是你永远不应该做的事情。相反,将所有元素索引收集到NSMutableIndexSet
对象中,然后使用removeObjectsAtIndexes:
一次删除所有对象。