2009-03-31 9 views
0

実行時に作成されたコンポーネントの削除に問題があります。私を助けてください。フレックス:メモリ問題

HERESに私は、オブジェクトを削除した後にイベント

 private function deleteSel(event:KeyboardEvent):void 
    { 
      if(event.charCode == 127) 
      { 
       FXVideo(ObjectHandles(event.target).getChildAt(0)).stop(); 
       delete(ObjectHandles(event.target).getChildAt(0)); 

       ObjectHandles(event.target).removeAllChildren(); 
       ObjectHandles(event.target).parent.removeChild(ObjectHandles(event.target)); 
       delete ObjectHandles(event.target);      
      } 
     } 

を削除し、キーボードで部品

var oh: ObjectHandles = new ObjectHandles;    
    oh.x = event.localX-xOff; 
    oh.y = event.localY-yOff; 
    Canvas(event.target).addChild(oh); 

    oh.addEventListener(KeyboardEvent.KEY_DOWN,deleteSel); 
    oh.width=270; 
    oh.height=200; 
    oh.mouseChildren = true; 
    var vdo:FXVideo = new FXVideo; 
    vdo.source = "http://thehq.tv/wp-content/uploads/flv/funny-people-trailer.flv";     
    vdo.percentHeight = 100; 
    vdo.percentWidth = 100; 
    oh.addChild(vdo); 

コードを作成するには、私のコードは、コンポーネント(内部はFxVideoコンポーネントである)、メモリ使用量がまだそこにあるハンドル。削除後のコンポーネントのメモリ割り当てを削除するには?

答えて

1

あなたは、イベントリスナーを削除する必要があるか、弱い参照して、イベントリスナーを追加することができます。

oh.addEventListener(KeyboardEvent.KEY_DOWN,deleteSel,false,0,true) 

私は削除を呼び出すことをお勧めしません。 removeAllChildrenを呼び出すと、それを処理する必要があります。しかし、あなたのコードを見ることで、それはおそらく必要ではありません。イベントリスナーを削除すると、そのイベントリスナーはクリーンアップされます。

+0

お返事ありがとうございます。ところで私はあなたが教えることをしますが、不都合にもそれはうまくいかないのです。削除されたコンポーネントのメモリ割り当てはまだ存在します。 IEとMozillaを使用して、問題がブラウザにあるかどうかを比較しますが、結果は同じです。助けてください。その他のテクニック?ありがとう – Jejad

+0

ガベージコレクションはすぐには実行されません。プロファイラからガベージコレクションを実行して、クリーンアップされているかどうかを確認してください。 – Osman

+0

私もこれを試してください:ObjectHandles(event.target).parent.removeChild後(ObjectHandles(event.target)); 私はSystem.gc()を呼び出しますが、まだ何も起こりません – Jejad

0

削除は動的オブジェクトでのみ機能し、ここでは影響しません。

event.target.removeEventListener(KeyboardEvent.KEY_DOWN,deleteSel); 

だけでなく、オスマンによって提案された弱参照を使用して:私は個人的に明示的にイベントリスナーを削除することをおすすめします。