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