次のようなコードを書くことはできますか?動作しているようですが、許可されている/安全であることを確認したいと思います。
// 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
)。
ただし、安全性を保証するために、これを2つのステップで実行することをお勧めします。削除するアイテムを保持する別の配列を作成し、それを列挙して削除を実行します。
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];
}
}