阅读MT文档,我已经看到可以释放内存并实现IDisposable .NET模式。
例如,在扩展UIViewController(MyViewController)的自定义类中,我可以覆盖以下方法:
public override void Dispose (bool disposing)
{
if (disposing){
// do some stuff here
}
base.Dispose (disposing)
}
从这一点开始,我的两个问题是:
提前谢谢你。问候。
答案 0 :(得分:3)
IDisposable的第一个MonoTouch用法与Mono或.NET相同。您在其他地方,stackoverflow或MSDN上阅读的有关此主题的内容将全部适用于此处。
重要的是,MonoTouch要记住NSObject
实现IDisposable
,因为它代表了一个原生对象,所以它很有意义。这意味着继承自NSObject
的所有内容( monotouch.dll 的很大一部分)都会实现IDisposable
。
- 除了图像,我还需要发布什么类型的元素?
醇>
大多数托管基于NSObject的对象实例很小但它们可以代表大型原生对象( GC 只能知道第一个,管理,大小)。
所以最好尽可能地处理基于NSObject的实例,例如:当你将它们用作局部变量时。 using
模式可以在C#中轻松实现。
OTOH使用你的判断,小NSString
不会记忆太多,而其他人可能很大(或未知,例如NSString GetWebPageContent (NSUrl)
。
- 我是否必须从MyViewController类的实例(myViewController.Dispose())调用Dispose方法,或者像dealloc方法一样自动调用Dispose方法?
醇>
Dispose
模式的一部分确保终结器会调用Dispose
(如果之前未调用过)。因此, GC 最终将回收与这些实例关联的内存(托管和非托管/本机)。
您可能希望使用某些工具,例如Gendarme(将在OSX上运行)或FxCop(仅限Windows),如果您的某些类型具有IDisposable字段,则会向您报告(例如)没有妥善处理。
免责声明:我是Gendarme的维护者: - )