2011-06-20 27 views
0

我有一本雜誌Ipad應用程序,它可以動態地從scrollview中添加/刪除webviews以減少內存使用量。例如,我有3個視圖容器,並在每一個我可以刪除現有的孩子......在Monotouch應用程序中調試內存泄漏

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

,然後添加一個新的Web子視圖組件(或網頁視圖滾動型)的容器。 我添加了第二級兒童刪除,但在某些情況下可能還有另一個級別。模擬器是完美的,但在IPad上,內存使用率只是增加,直到它崩潰時出現內存不足異常。 so .....

i)單點觸控是否會自動銷燬所有嵌套子元素的UIView? ii)儀器沒有顯示任何內存泄漏,那麼調試它的最好方法是什麼?

謝謝。

回答

3

如果沒有更多的引用到你的UIView那麼它應該得到GC'd。找出你的對象是否被收集的一個快速方法是創建一個繼承自UIView的類(或者你正在使用的任何類),然後爲該類創建一個終結器/析構函數。在終結器中做一個控制檯寫。

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

當你運行你的程序確保你看到這個被寫入到控制檯,當你想到要收集的對象。根據我的經驗,模擬器幾乎可以在對象丟失最後一個參考時立即收集對象。在設備上它可能不那麼快。