0

未使用および初期化されていない変数を削除するにはどうすればよいですか? 画面サイズによって使い分けられるマスクやフィルターがいくつかありますが、不要な場合は削除できますか? 例えば:

var appMask:Shape;
if ((screenR % 1) > 0) {
    appMask = new Shape;
    appMask.graphics.beginFill(0x000000);
    appMask.graphics.drawRect(0,0,screenW,screenH);
    appMask.graphics.endfill();
} else {
    //delete appMask variable?
}

また、変数の作成時に新しい Shape を作成し、後でガベージ クリーンアップのために null に設定することも検討しましたが、これが期待どおりに機能することを確認したいと考えています。

ありがとう!

4

2 に答える 2

3

短い答え、いいえ。

あなたが提供した例では、実際にはオブジェクトをインスタンス化していないので、心配する必要はありません。変数は、それが作成されたスコープの期間中存在し、その後、悪影響を与えることなく消えます。大きなメモリ オーバーヘッドはなく、メモリ リークの可能性もありません。

オブジェクトをインスタンス化した場合、実際には削除できません。自動化されたガベージ コレクターができるだけ早くそれを取得できるようにするには、オブジェクトに関連付けられているすべてのイベント リスナーを削除し、そのオブジェクトへのすべての参照を変更 (null が機能) し、次のスイープでそれを処理する必要があります。

于 2012-05-02T17:49:32.940 に答える
0

この場合、appMask を削除するために何もする必要はありません。appMask が使用されておらず、アプリ内のどこでも参照されていない場合、それが占有するメモリはガベージ コレクターによって解放されます。else ブロックで明示的に null に設定する必要はありません。

一方、delete キーワードを使用して動的オブジェクトのメンバーを削除できますが、ローカル変数は削除できません。

于 2012-05-02T17:49:41.063 に答える