我已经使用了Xamarin一段时间了,我遇到了一个非常奇怪的问题。
我能够崩溃一个非常简单的两个屏幕应用程序。在第一个屏幕上,我有UIButton
个TouchUpInside
事件。在第二个,我有一个UIImageView
附加图像(来自本地文件)。
我所要做的就是始终在这两个视图控制器之间前后移动。
当我使用活动监视器连接XCode的乐器时,我注意到我的简单应用程序在内存被回收之前达到~100MB的内存,然后它的使用量下降到~15MB。
但是当我循环导航足够长时,内存超过140MB并且应用程序崩溃。我在处理更复杂的应用程序时发现了这种行为。当然,我正在采取所有可用的预防措施:
基本上,在我的复杂应用中,我已经覆盖了所有Dispose
基类中的UIViewControllers
方法,我可以看到使用{{1}调用Dispose
方法在显示的每个视图控制器上。但是,内存使用量不会下降。
它出了什么问题?
我想指出一些事情:
这里有一些代码示例:
disposing == false
答案 0 :(得分:3)
您正在创建按钮/图像的实例并将其存储在后备字段中,并且您未在控制器的Dispose
中调用Dispose
。 Controller实例化它们,因此你必须清除它们。
在上面的示例中,您也没有取消按钮TouchUpInside
事件。我建议不要使用lambda,实际上为它创建一个方法,以便以后更容易分离。
TouchUpInside -= this.Method;
此外,您不是要从添加它的视图中删除图像。
我知道你说你在视图中做这些事情,它会消失,但这不会发生在你的示例代码中。你能提供一个完整的例子来处理这些基础知识吗?