Memory leaks 带预加载的超微缩视图
我使用一个非常大的UIScrollView与WebView/子视图等,所以我需要它是动态的,并预装了3个容器视图。它在模拟器中工作,但在内存不足的设备上崩溃。 我使用递归方法在3个主视图中添加和删除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
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。