我有一个杂志Ipad应用程序,可以从滚动视图中动态添加/删除webview,以降低内存使用率。例如,我有3个视图容器,每个容器都可以移除现有的子容器......
foreach (UIView subv in targetView.Subviews) {
foreach (UIView subsubv in subv.Subviews) {
subsubv.RemoveFromSuperview();
subsubv.Dispose();
}
subv.RemoveFromSuperview();
subv.Dispose();
}
然后将新的Web子视图组件(或带有webview的scrollview)添加到容器中。 我添加了第二级儿童删除,但在某些情况下可能还有另一个级别。模拟器是完美的,但在IPad上,内存使用量会增加,直到它因内存不足而崩溃。 所以.....
i)monotouch是否会自动销毁所有嵌套子节点的UIView?
ii)仪器没有显示任何内存泄漏,调试此问题的最佳方法是什么?
感谢。
答案 0 :(得分:3)
如果没有更多对你的UIView的引用,那么它应该得到GC。找出对象是否被收集的快速方法是创建一个继承自UIView(或您正在使用的任何类)的类,然后为该类创建终结器/析构函数。在终结器中进行控制台编写。
~MyView()
{
Console.WriteLine("MyView: finalized");
}
运行程序时,请确保在希望收集对象时将其写入控制台。根据我的经验,模拟器几乎就像物体丢失它的最后一个参考一样立即收集物体。在设备上它可能不会那么快。