带预加载的无限UIScrollView

时间:2011-06-29 10:24:21

标签: memory-leaks uiscrollview xamarin.ios

我使用非常大的UIScrollView和webviews / subviews等,所以我需要它是动态的,并预装了3个容器视图。它在模拟器中工作,但在内存较低的设备上崩溃。 我正在使用递归方法从3个主视图中添加和删除

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(myView,0)调用; 在大约10页翻页后,应用程序仍会崩溃并显示内存警告。这段代码好吗,甚至是必要的?我应该使用某种viewcontroller。

谢谢!

1 个答案:

答案 0 :(得分:1)

据我所知,我希望当你调用subview时,我对此是正确的.Dispose()它不会立即被垃圾收集,而是在其他应用程序使用之后。尝试在可能的情况下将子视图内容设置为null,然后调用Dispose()。还要考虑在子视图/主视图中实现DidReceiveMemoryWarning方法。我正在使用一个类似的应用程序,最多使用三个滚动视图,每个滚动视图有四个页面,它没有任何问题。