这段代码可以正常运行,文档中也没有任何提示,但它真的安全吗?
[mutableArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// do some stuff to obj before removing it
[mutableArray removeObject:obj];
}];
这段代码可以正常运行,文档中也没有任何提示,但它真的安全吗?
[mutableArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// do some stuff to obj before removing it
[mutableArray removeObject:obj];
}];
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);
}];
NSArrayM被改变
,它是M
而不是I
。那么为什么可变数组不能被改变呢? - Anoop Vaidya这是您绝不能做的事情。相反,将所有元素索引收集到一个NSMutableIndexSet
对象中,然后稍后使用removeObjectsAtIndexes:
一次性删除所有对象。