3

Robotlegs にはとても感謝していますが、最近 GC の問題が発生しました。参照 null を設定するだけでコンテキスト オブジェクトを破棄できませんでした。FB プロファイル ツールを使用すると、コンテキスト オブジェクトが「GC ルート」のように見えることがわかりました。それを理解するために、コンテキスト obj を作成し、到達不能のままにする単純なクラスを作成します。このクラスの詳細は次のとおりです。

public class MemoryLeak extends Sprite{
    public function MemoryLeak()
    {
        makeAndDrop();
    }

    public function makeAndDrop():void{
        var _context = new Context(this);
        _context = null;
    }
}

このクラスを実行したとき、GC によって破棄されることを望んでいましたが、うまくいきませんでした (毎回ではありません)。プロファイル ツールは、このインスタンスが GCRoot であることを示しています。GC に関する記事をいくつか読みましたが、GCRoot 自体について言及しているものはほとんどありません。誰か理由を教えてください。どうもありがとうございました。

PS: makeAndDrop() の後に System.gc() を 2 回呼び出そうとしましたが、うまくいきませんでした。実際、私は「is GCRoot」の問題 (fb プロファイルによって暗示されている) にもっと興味があります。それについて教えていただければ、もっと役立つかもしれません。

4

1 に答える 1

0

Contextはおそらく、追加された子に対して依存性注入を実行したり、それらのメディエーターを作成したりできるようにリッスンすると思います。thismediatorMapまたはviewMapに話しかけるまでリスナーが接続されないことを望むでしょうが、RLの作成者は、ビューにコンテキストが必要なユースケースを考慮しない可能性が高いと思います。ビューの実際の寿命よりも短い。

于 2013-02-14T03:12:31.243 に答える