2011-06-20 7 views
0

私はスクロールビューから動的にWebビューを追加/削除する雑誌Ipadアプリケーションを使用して、メモリ使用量を低く保ちます。例えば、私は3個のビューコンテナを持ち、それぞれの1に私が...Monotouchアプリケーションでメモリリークをデバッグ

foreach (UIView subv in targetView.Subviews) { 
       foreach (UIView subsubv in subv.Subviews) { 
        subsubv.RemoveFromSuperview(); 
        subsubv.Dispose(); 
       } 
       subv.RemoveFromSuperview(); 
       subv.Dispose(); 
      } 

を既存の子を削除することができ、その後、コンテナに新しいWebサブビューコンポーネント(またはwebviewsとscrollview)を追加します。 子供の削除の第2レベルを追加しましたが、場合によってはおそらく別のレベルがあります。エミュレータは完璧ですが、IPadでは、メモリ使用量が少なくなるとクラッシュするまでメモリ使用量が増加します。 .....

i)モノトゥッチは、すべてのネストされた子を含むUIViewを自動的に破棄しますか?

ii)インストゥルメントにメモリリークが表示されていない場合は、これをデバッグする最善の方法は何ですか?

ありがとうございました。

答えて

3

あなたのUIViewへの参照がなくなると、GC'dが取得されます。あなたのオブジェクトが収集されたかどうかを調べる簡単な方法は、UIView(または使用しているクラス)を継承し、クラスのファイナライザ/デストラクタを作成するクラスを作成することです。ファイナライザでは、コンソール書き込みを行います。

~MyView() 
{ 
    Console.WriteLine("MyView: finalized"); 
} 

プログラムを実行するときに、オブジェクトの収集が予想されるときにコンソールに書き込まれていることを確認してください。私の経験では、シミュレータはオブジェクトが最後の参照を失うのとほぼ同じようにオブジェクトを収集します。デバイス上ではそれほど速くないかもしれません。

関連する問題