什么是单调相当于dealloc?

时间:2010-10-26 15:18:46

标签: c# iphone objective-c xamarin.ios

我正在查看一个在objective-c

中包含此代码的在线示例
    -(void)dealloc {
    [activeController viewWillDisappear:NO];
    [activeController.view removeFromSuperview];
    [activeController viewDidDisappear:NO];

    [activeController release];
    [super dealloc];
}

我认为MT等价物是Dispose,我是否正确?

我不需要打电话给:

    [activeController release];
    [super dealloc];

方法,因为它们将是Monotouch上收集的垃圾,这也是正确的吗?

4 个答案:

答案 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运行的速度就越快。“