从NSMutableArray中删除对象

Ben*_*ard 16 cocoa objective-c nsmutablearray

我偶然发现了以下设置for循环的快捷方式(与我一直使用的教科书示例相比,快捷方式):

for (Item *i in items){ ... }
Run Code Online (Sandbox Code Playgroud)

与较长的格式相反:

for (NSInteger i = 0; i < [items count]; i++){ ... } //think that's right
Run Code Online (Sandbox Code Playgroud)

如果我使用较短的版本,有没有办法删除当前正在迭代的项目(即"我")?或者我需要使用更长的格式?

Vla*_*mir 31

快速枚举时,您无法从数组中删除对象:

计算是"安全的" - 枚举器具有变异防护,因此如果您在枚举期间尝试修改集合,则会引发异常.

无论如何,为什么你需要在枚举时更改容器?考虑存储需要删除的元素,并使用removeObjectsInArray:removeObjectsAtIndexes:方法将其从容器中删除.


小智 10

只需break;在删除项目后添加关键字...

for(id item in items) {
    if([item isEqual:itemToDelete]) {
        [items removeObject:item];
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @ Abdullah71,你永远不会使用*. (4认同)

ser*_*hii 5

枚举期间不得修改Objective-C集合。

您可以使用此变体从集合中删除对象:

for (NSInteger i = items.count - 1; i >= 0 ; i--) {
   [items removeObjectAtIndex:i];
}
Run Code Online (Sandbox Code Playgroud)