「非動的な子」とは、プリコンパイルされた別のライブラリ シンボルの子を意味します。たとえば、ライブラリ シンボル MC_1 にインスタンス MC_2 が含まれている場合 - MC_1 は actionscript 用にエクスポートされ、MC_1 はそのインスタンス名を使用してそこからアドレス指定されます (たとえば、instance_1 とします)。 )。このシナリオでは、MC_2 は MC_1 への this.parent 参照を引き続き取得し、MC_1 を拘束してガベージ コレクターの動作を停止させますか? (MC_1 の AS3 ファイルで) removeChild(instance_1) を削除し、instance_1 を null に設定する必要がありますか? コード内で MC_2 に参照が与えられていない場合でも?
私がガベージ コレクションについて学んだこと (無駄に読んだ 20 以上の記事の中で) によると、その答えはおそらく、そのような参照を削除する必要はないということですが、私が質問するのはこれだけです。試していません。
画面が変更されるたびに、各クラス (ほとんどのクラスには独自の destructor() があります) を介して destructor() 関数をカスケードする DocumentClass current_screen 変数がゲーム内にあります (また、表示リストから current_screen を削除して null に設定します)。カスケード デストラクタは、クラスの子とそのすべてのリスナーを削除し、すべてのオブジェクト変数参照 (配列内のものを含む) を null に設定します。ただし、新しい画面が作成されるたびに (current_screen = new Screen())、メモリ使用量は着実に増加しており、ガベージ コレクションが適切に行われていないことが示唆されます (最終的に遅延が発生します)。デストラクタ クラスで他に何ができるかはわかりませんが、純粋にグラフィカルで非動的な子を完全に必死になって削除し始めることを除いては。