Flex には、モジュール クラスのインスタンスである子の「セクション」をロードして破棄する「フレームワーク」があります。これらには多くの Web サービスとアニメーションが含まれており、公開サイトの一部です。
画面からセクションを削除する前に、インスタンスで「hideSection()」インターフェイス メソッドを呼び出します。このメソッドでは、コントロールをフェードアウトするか、セクションが閉じられないようにする場合は false を返します。現在、実行中の Timer インスタンスも停止します。
問題は、セクション オブジェクトがステージから削除されても、未解決の処理が残っている可能性があることです。たとえば、effectEnded が何かをトリガーする場所でエフェクトを実行している場合や、低速の Web サービス リクエストがタイムアウトしてエラーがポップアップする場合があります。
ガベージ コレクターの動作方法により、そのオブジェクト object がすぐに殺されることもあれば、後で殺されることもあります。セクションが閉じられると、悪いことが起こるのを最小限に抑えようとしています。
次の可能な解決策を思いつきました。より良いものがあるかどうか疑問に思いました。
- true に設定された _disposed プロパティがあります。(セクションが閉じられた後)望ましくない動作をする可能性のあるイベントハンドラー内では、
if (_disposed) { return; }
. - .NET のように、'IDisposable' インターフェイスを実装する必要がある場合もあります。
これが本当に私の唯一の選択肢ですか?それとも、ガベージ コレクションを早めることができますか? エフェクトがまだ実行されている場合でも、ガベージ コレクションが発生する可能性はありますか?
また、特にタイマーを _null に設定する必要があるかどうかについても興味があります。または、参照が残っていない場合、タイマーを停止してガベージコレクションするだけで十分ですか。