0

ローダーの使用に問題があり、unloadAndStop() メソッドがどのように機能するかを完全に理解する必要があると感じています。実行時に必要なときに複数のswfsをロードするプロジェクトに取り組んでいます。このために、私は 1 つのローダーを使用し、完了したらその内容をキャッシュに引き出してきました。

シングルローダーは私が書いていない拡張クラス経由で実装されており、新しい URLRequest.

今、私はこのシステムを使用していくつかの奇妙な問題を抱えていました.Adobeのドキュメントによると、ガベージコレクターによる削除のためにオーディオ、再生、およびフラグを停止する unloadAndStop(true) 呼び出しにまでさかのぼります。明らかに、これは私が望んでいるものではありません。ステージ上とキャッシュ内に、このオブジェクトへの参照がまだあります。この方法でガベージ コレクションのために何かに直接フラグを立てる方法があるのは奇妙に思えますが、私の知る限り、それを行う方法は他にありません。

そのため、ローダーでロードされたものを適切に削除するには、その方法でアンロードする必要あると思います。これは事実ですか?何かをロードし、そのコンテンツを movieClip1 に引き出し、新しい movieClip をロードしてから、movieClip1 へのすべての参照 (元の Loader コンテンツ) を削除すると、ガベージ コレクトされますか、それとも unloadAndStop メソッドを使用して削除する必要がありますか?

TL;DR:

ローダーから unloadAndStop(true) を呼び出して、ロードしたものがメモリから削除されることを保証する必要がありますか? または、ローダーはメモリリークを恐れずに別の URLRequest をロードできますか?

4

1 に答える 1

0

ドキュメントでよく説明されています:

gc:Boolean (デフォルト = true) — 子 SWF オブジェクトで実行するか (true)、実行しないか (false) のヒントをガベージ コレクターに提供します。多くのオブジェクトを非同期的にアンロードする場合、gc パラメーターを false に設定すると、アプリケーションのパフォーマンスが向上する可能性があります。ただし、パラメーターが false に設定されている場合、unloadAndStop() コマンドの実行後、子 SWF ファイルのメディア オブジェクトと表示オブジェクトがメモリ内に保持される可能性があります。

これは、SWF をいくつか作成し、特定の子を取得して、SWF を削除できるためです。ただし、その子への参照を保持します。つまり、子はガベージ コレクションされません。しかし、GC に子のチェックを強制すると、それらすべてにコレクションのマークが付けられ、使用されているものは残されます。

基本的に、物事をきれいにするために GC を強制する必要はありません。最善かつ最も重要な方法は、Stage からすべてを削除し、Stage へのすべての参照を消去することです。遅かれ早かれGCによってチェックされるでしょう。unloadAndStopは、自分が何をしているかを追跡していない人のための近道であり、できる限りきれいにしたことを確認するための安全対策です.

個人的には使いません。

于 2014-04-09T08:41:21.320 に答える