【发布时间】:2015-10-10 21:52:46
【问题描述】:
我有一个大型 Xamarin iOS 应用程序正在遭受随机崩溃 - 我认为这是由于内存问题。在尝试解决问题之前,我试图确保我完全了解如何正确处理所有内容,因此我创建了一个非常简单的示例应用程序,其中包含 UINavigationController 和 2 个屏幕:
我的想法是使用分析器检查我在使用后是否正确清除了所有内容,所以我:
- 使用分析器运行我的应用程序
- 加载所有内容后创建快照。 (奇怪的是我要点击3次才对象增长为0)
- 单击“显示下一个屏幕”按钮并拍摄快照 4。
- 单击“返回”按钮,然后拍摄快照 5。
我的目标是让 5 抵消 4,这样我就知道一切都被正确处理了。然而,它实际上创造了另外 369 个对象,而不是对象增长是一个负数:
我在 Screen2ViewController 中创建了一个 dispose 方法,我认为它可以解决问题:
public partial class Screen2ViewController : UIViewController
{
public override void ViewDidDisappear (bool animated)
{
base.ViewDidDisappear (animated);
this.Dispose ();
}
public Screen2ViewController (IntPtr handle) : base (handle)
{
}
partial void GoBackButton_TouchUpInside (NSObject sender)
{
this.NavigationController.PopViewController(true);
}
protected override void Dispose (bool disposing)
{
this.ReleaseDesignerOutlets ();
this.View.Dispose ();
base.Dispose (disposing);
}
}
我是否误解了通过打开然后关闭一个新屏幕我应该期望净对象增长为 0 的事实?如果不是,那么我做错了什么以致无法正确发布所有内容?
我应该手动调用this.ReleaseDesignerOutlets() 还是自动调用?我确实在它上面设置了一个断点,但它似乎从未被调用,因此将它添加到我的 Dispose 方法中。
【问题讨论】:
标签: c# ios memory-management xamarin xamarin.ios