2011-06-29 52 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