2

私は、ランダムな型のオブジェクトの束を生成し、それら (まあ、それらへの参照) を配列に格納するクラスを持っています。これを行っているとき、それらへの参照もそれらの型に固有の配列に格納します。

その後、型固有の各配列が反復処理され、それらのオブジェクトの x 位置が減分されます。そのループ内で、それらが画面上にある場合、それらは可視オブジェクトのさらに別の配列に追加されます。それらが画面から消えると、その可視オブジェクト配列から削除されます。

私のゲームのルールは次のとおりです。オブジェクトは、表示されている場合にのみ破壊できます。そのため、オブジェクトを破棄しようとすると、可視オブジェクト配列が検索され、オブジェクトが見つかった場合は削除されます。

問題は、オブジェクトが「可視配列」から削除されると、「型固有の」配列がループオーバーされ続け、それらすべてのオブジェクトの x 位置がデクリメントされることです。たとえオブジェクトが画面に表示されなくなっても、 .

オブジェクトへのすべての参照を削除する最良の方法は何ですか? 私はすべての配列を調べて「removeObjectIdenticalTo」を呼び出すのをためらっていました...私の最初の解決策は、「破壊された」オブジェクトにBOOLプロパティを追加し、画面上で破壊された場合はそれをYESに設定することでした。次に、破棄されたオブジェクトをスキップする x デクリメント ループを作成します....しかし、そのオブジェクトが必要以上に長く固執しているため、メモリ管理に関する限り、それが最善のアプローチではないのではないかと考え始めました...

これにどのように対処する必要がありますか?

4

2 に答える 2

0

これは、すべてのオブジェクトをディクショナリに格納することから始めた場合に機能する可能性があります。それに続いて、それが存在する配列の辞書キーと同一の NSString を含むオブジェクト (渡される) にプロパティを追加します。

次に、あなたがしなければならないことは次のとおりです。

NSMutable *array = [dicionary objectForKey:object.dictionaryKeyString];
//then remove the object from *array
于 2012-08-29T01:26:15.643 に答える
0

すべての配列を調べて、それらに対して「removeObjectIdenticalTo」を呼び出すのをためらっていました

なんで?これは効率が悪いと思っているからですか?どうして知っていますか?

ただし、真の効率を得るには、オブジェクトがすべて異なるオブジェクトであると仮定して、NSArray ではなく NSSet を使用してください。特定のオブジェクトへのアクセスは効率的であることが保証されています。

于 2012-08-29T01:28:20.237 に答える