代码之家  ›  专栏  ›  技术社区  ›  Chris Kooken

DealLoc的单触式等效物是什么?

  •  6
  • Chris Kooken  · 技术社区  · 14 年前

    我正在网上查看一个示例,它在Objective-C中包含此代码

        -(void)dealloc {
        [activeController viewWillDisappear:NO];
        [activeController.view removeFromSuperview];
        [activeController viewDidDisappear:NO];
    
        [activeController release];
        [super dealloc];
    }
    

    我想相当于mt的东西会被处理掉,对吗?

    我不需要打电话给:

        [activeController release];
        [super dealloc];
    

    方法,因为它们将被垃圾收集在单触式,这也是正确的吗?

    4 回复  |  直到 13 年前
        1
  •  14
  •   miguel.de.icaza    14 年前

    MonoTouch是垃圾收集,因此您无需担心自己进行释放。

    也就是说,有时您会意识到您在内存中保留了一些大型资源,并且希望通过立即处理资源而不是等待垃圾收集器启动来帮助系统。

    调用Dispose非常有用:它会在垃圾收集器必须调用之前释放相关联的资源。这对于大型对象(如图像)尤其重要,因为图像存储在非托管堆中,而对象引用存储在托管堆中。

    这意味着,如果您有一个8兆字节的映像:8兆字节存储在非托管堆(由Objective-C管理)中,1个指针(4字节)存储在托管堆中。就Mono的垃圾收集器而言,您使用的是4个字节,而不是8兆。

    所以在这种情况下,您可以通过调用dispose来帮助系统:您知道看起来无辜的“myimage”变量实际上指向一大块内存。

        2
  •  1
  •   Greg    14 年前

    一触式是垃圾收集。在垃圾收集对象之前,将调用对象的析构函数。

    这里是 Microsoft's page about C# destructors . 我不知道MonoTouch中是否有更多与析构函数相关的文档。

        3
  •  1
  •   bryan costanich    14 年前

    你不需要打电话给Release或DealLoc,他们由MonoTouch负责。

        4
  •  0
  •   nicolas    13 年前

    来自Xamarin文档

    http://docs.xamarin.com/ios/advanced_topics/api_design#When_to_call_Dispose

    当需要Mono来摆脱对象时,应该调用Dispose。一个可能的用例是当Mono不知道nsObject实际上持有对重要资源(如内存或信息池)的引用时。在这些情况下,您应该调用Dispose来立即释放对内存的引用,而不是等待Mono执行垃圾收集循环。 在内部,当mono从C字符串创建nsstring引用时,它将立即处理这些引用,以减少垃圾收集器必须执行的工作量。处理的对象越少,GC的运行速度就越快。”