1

複雑な UI (Flex 3.6 で構築) を持つ大きなアプリケーションがあります。多くのネストされたコンポーネントがあり、それらのほとんどにはイベント リスナーまたはバインディング セッターがあります。構造は次のようなものです。

- Client View
         - Portfolio View
         - Personal data
         - etc. etc.
- Manager view
         - etc. etc.

クライアントビューを破棄して再初期化する必要がある場合があります。私がしているのは、コンテナから削除することです。しかし、メモリが正しくガベージ コレクションされていないようです (問題は、イベント リスナーとデータ バインディングの存在です)。

本やフォーラムを読んで、この状況を管理する最善の方法は、オブジェクトの破棄時にデータ バインディングとイベント リスナーを削除することであることがわかりました。しかし、どうすればそれができますか?Client View 階層の最後の子に、それが削除されたことを伝えるのは誰ですか?

「addedToStage」および「removedFromStage」イベント ハンドラを介して実装しました。動作しているように見えましたが、これは一種の回避策です。このイベントは何度も呼び出されるため、レンダリングが遅くなります。

私の質問は次のとおりです。この問題は一般的だと思いますが、より良い解決策はありますか?

4

1 に答える 1

0

ステージ上での外観に基づいてコンポーネントを破棄して再アクティブ化することが回避策であると考えるのはなぜですか?このようにすることは非常に一般的であり、個人的にはこれを行わない特別な理由は見当たりません。

私はモバイルプロジェクトのみに取り組んでいますが、これは基本的に、コンポーネントの非アクティブ化と再アクティブ化を処理するのとまったく同じ方法です。ステージから削除されると、コンポーネントが再度追加されるとすぐに、すべてのイベントハンドラーが削除され、再度追加されます。それ以外に、コンポーネントを完全に破棄する追加のメソッドがあるので、最初にイベントリスナーを削除し、オブジェクトへの参照を削除して、最後にnullにします。

于 2012-07-30T14:15:38.230 に答える