2011-06-29 34 views
0

即時通訊使用非常大的UIScrollView與webviews /子視圖等,所以我需要它是動態的,並預裝了3個容器視圖。它可以在模擬器中工作,但會在內存不足的情況下在設備上崩潰。 我加入並使用遞歸方法inifinite UIScrollView與預加載

private void destroyChildren(UIView view, int level) { 
     if (view.Subviews.Length > 0) { 
      foreach (UIView subview in view.Subviews) { 
       destroyChildren(subview, level++);   // recurse 
       subview.RemoveFromSuperview(); 
       if (subview is UIWebView) { 
        (subview as UIWebView).ShouldStartLoad -= webHandler; 
       } 
       if (subview is scrollViewer) { 
        (subview as scrollViewer).clicked -= viewClicked; 
       } 

       subview.BackgroundColor = UIColor.Cyan; // release bgImage? 
       subview.Dispose(); 
      } 
     } 
     else { 
      if (level> 0) {   // dont dispose root view 
        view.Dispose(); 
      } 
     } 

和調用destroyChildren從3個主視圖除去(MyView的,0); 該應用程序仍然崩潰後大約10頁左右翻轉與內存警告。這段代碼好嗎,甚至是必要的?我應該使用某種視圖控制器來代替。

謝謝!

回答

1

從我所知道的,我希望我是正確的,當你調用subview.Dispose()它不是垃圾收集立即但後來一些其他應用程序的使用。嘗試在可能的情況下將子視圖內容設置爲null,並調用Dispose()。還要考慮在子視圖/主視圖中實施DidReceiveMemoryWarning方法。我正在使用一個類似的應用程序,最多使用三個滾動視圖,每個頁面有四個頁面,並且沒有任何問題。

+0

FOREACH不允許將子設置爲NULL,也許是另一個功能。我敦促DidReceiveMemoryWarning,但是因爲一切都已經處置完畢,所以它只是進入救生艇的時候。 –

+0

FOREACH不允許將子項設置爲NULL:必須通過子項並調用RemoveFromSuperview。 – Scarlaxx