Memory leaks 带预加载的超微缩视图

Memory leaks 带预加载的超微缩视图,memory-leaks,uiscrollview,xamarin.ios,Memory Leaks,Uiscrollview,Xamarin.ios,我使用一个非常大的UIScrollView与WebView/子视图等,所以我需要它是动态的,并预装了3个容器视图。它在模拟器中工作,但在内存不足的设备上崩溃。 我使用递归方法在3个主视图中添加和删除 private void destroyChildren(UIView view, int level) { if (view.Subviews.Length > 0) { foreach (UIView subview in view.Subviews

我使用一个非常大的UIScrollView与WebView/子视图等,所以我需要它是动态的,并预装了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(); 
            }
        }
并与子对象一起调用(myView,0); 在翻页10次左右并显示内存警告后,应用程序仍会崩溃。这个代码可以吗,甚至是必要的?我应该使用某种viewcontroller吗


谢谢

据我所知,我希望在调用subview.Dispose()时我的判断是正确的。它不是立即进行垃圾收集,而是在其他应用程序使用之后进行垃圾收集。尽可能将子视图内容设置为null,然后调用Dispose()。还可以考虑在子视图/主视图中实现DeDealVieleMeMyRead方法。我正在使用一个类似的应用程序,它最多使用三个滚动视图,每个视图有四个页面,并且工作正常。

FOREACH不允许将children设置为NULL,可能是另一个函数。我想我确实收到了记忆警告,但既然一切都已经处理好了,现在是登上救生艇的时候了。FOREACH不允许将children设置为NULL:您必须检查children并从superview调用remove。