0

我可以编写如下代码吗?它似乎有效,但我想确保它是允许/安全的:

// menu is a NSMenu*
for (NSMenuItem *item in [menu itemArray]) {
    if (some condition) {
        [menu removeItem:item];
    }
}
4

2 回答 2

0

如果它没有立即抛出异常(就像在枚举时直接修改数组一样),那么它可能没问题。NSMenu可能会为您提供其内部数组的副本(假设它将其项目保存在 中NSArray)。

但是,为了保证安全,您可能希望分两步执行此操作。创建另一个数组来保存要删除的项目,然后枚举并进行删除:

NSMutableArray * itemsToRemove = [NSMutableArray array];
for( NSMenuItem *item in [menu itemArray] ){
    if( some condition ){
        [itemsToRemove addObject:item];
    }
}

for( NSMenuItem * item in itemsToRemove ){
    [menu removeItem:item];
}
于 2012-07-25T03:13:32.493 回答
0

仅作记录:
如果您关心内存并且不想创建辅助数组,请使用:

for (int i = menu.itemArray.count - 1; i >= 0; --i)
{
    if( some condition for index i ){
        [menu removeItemAtIndex:i];
    }
}
于 2014-05-06T09:55:47.493 回答