我正在查看一个在objective-c
中包含此代码的在线示例 -(void)dealloc {
[activeController viewWillDisappear:NO];
[activeController.view removeFromSuperview];
[activeController viewDidDisappear:NO];
[activeController release];
[super dealloc];
}
我认为MT等价物是Dispose,我是否正确?
我不需要打电话给:
[activeController release];
[super dealloc];
方法,因为它们将是Monotouch上收集的垃圾,这也是正确的吗?
答案 0 :(得分:14)
MonoTouch是垃圾收集的,因此您无需担心自己进行解除分配。
话虽这么说,有时你意识到你在内存中保留了一些大量资源,并且你想通过立即处理资源而不是等待垃圾收集器启动来协助系统。
这是在调用Dispose派上用场时:它释放垃圾收集器之前关联的资源。这对于大型对象(如图像)尤为重要,因为图像存储在非托管堆上,而对象引用则存储在托管堆中。
这意味着如果你有一个8兆字节的图像:8兆字节存储在托管堆中的非托管堆(由Objective-C管理)和1个指针(4字节)中。就Mono的垃圾收集器而言,你使用的是4个字节,而不是8个megs。
所以当你可以通过调用dispose来协助系统时就是这样:你知道无辜的“myImage”变量实际上指的是一大块内存。
答案 1 :(得分:1)
Monotouch是垃圾收集。在对象被垃圾收集之前,会调用该对象的析构函数。
这是Microsoft's page about C# destructors。我不知道Monotouch中是否有更多相关的析构函数文档。
答案 2 :(得分:1)
你不需要调用release或dealloc,它们由MonoTouch处理。
答案 3 :(得分:0)
来自Xamarin文档
http://docs.xamarin.com/ios/advanced_topics/api_design#When_to_call_Dispose
当你需要Mono来摆脱你的物体时,你应该调用Dispose。一个可能的用例是当Mono不知道您的NSObject实际上是持有对内存或信息池等重要资源的引用时。在这些情况下,您应该调用Dispose立即释放对内存的引用,而不是等待Mono执行垃圾回收周期。 在内部,当Mono从C#字符串创建NSString引用时,它将立即处置它们以减少垃圾收集器必须执行的工作量。处理的对象越少,GC运行的速度就越快。“