我可以编写如下代码吗?它似乎有效,但我想确保它是允许/安全的:
// menu is a NSMenu*
for (NSMenuItem *item in [menu itemArray]) {
if (some condition) {
[menu removeItem:item];
}
}
我可以编写如下代码吗?它似乎有效,但我想确保它是允许/安全的:
// menu is a NSMenu*
for (NSMenuItem *item in [menu itemArray]) {
if (some condition) {
[menu removeItem:item];
}
}
如果它没有立即抛出异常(就像在枚举时直接修改数组一样),那么它可能没问题。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];
}
仅作记录:
如果您关心内存并且不想创建辅助数组,请使用:
for (int i = menu.itemArray.count - 1; i >= 0; --i)
{
if( some condition for index i ){
[menu removeItemAtIndex:i];
}
}