0

私にこれをなぞなぞ:私はMouseEvent.MOUSE_DOWN呼び出す私のを持っていますmouseHandler。後者は次のようになります。

public function mouseHandler(evt:MouseEvent):void
{

    var p:Point = new Point(mouseX, mouseY);

    var objs:Array = new Array(getObjectsUnderPoint(p));

}

したがって、私が知りたいのは、objs配列とpポイントが毎回上書きされ、前のobjs配列とpポイントがワイプされて新しい配列が生成されるか、それとも...新しい配列が作成されるかということです。何度も何度も指さしますか?もちろん、trace(objs)を実行すると期待どおりの結果が得られますが、気付かずにバックグラウンドでシステムを停止しているのでしょうか。あなたの専門知識をいただければ幸いです。

編集:回答者からかなりのことを学んだ後-ところで-私は何か他のことを考えさせられ、後で簡単に検索して、理論的に確実に参照を削除する方法を見つけました:

var a = null;

関数の最後でGCされるので、これはおそらく必要ないことを理解していますが、書き込みに2ティックかかることを考えると、申し訳ありませんが、安全ではありませんか?

4

2 に答える 2

0

pはプリミティブではなくオブジェクトであるため、そのメモリ割り当ては、ローカルプリミティブのようなスタックではなく、ヒープから取得されます(したがって、ガベージコレクションが必要です)(関数が終了するとワイプされます)。

したがって、この関数が呼び出されるたびに新しいメモリが割り当てられ、GCが実行されるまでメモリ使用量が一時的に増加しますが、その量はおそらく重要ではありません(配列が大規模でない場合)。

于 2012-06-01T11:10:46.430 に答える
0

私が理解していることから、このように機能します。これらの変数の参照は、関数が終了すると失われます。値は最終的にGCされます。

関数を2回呼び出すと、新しい参照が作成され、新しいデータが入力されます。以前の参照の値はまだメモリに存在し、ガベージコレクターを待機している可能性がありますが、必ずしもそうとは限りません。リスナーがアタッチされている場合、Flash Playerはそれらがまだ有用であると見なすため、アプリケーションの実行とリッスンが終了するまでメモリに存在し、理論的にはアクセスできなくなった場合でも、イベントに反応します。

編集:あなたの場合、何が起こっているのかというと、関数の最後に消える2つの参照を作成しているということです。これらはイベントリスナーとは関係がなく、リスナーが作成しますが、アタッチされていないため、関数の終了後にGCによる収集が停止することはありません。参照の配列を作成しますが、それは値が他の場所(ディスプレイリストなど)で参照される他のオブジェクトへの参照にすぎません。配列だけがこの関数の外部で参照されない場合は、GCtedする必要があります。

于 2012-06-01T11:57:11.760 に答える