2013-11-26 40 views

回答

5

委托类型与接口一样被引用计数(实际上它们被实现为接口)。这意味着,如果它们超出了范围,那么幕后的对象(您可能已经看到ArcRec $ xxxx的某处提到了 - 这是编译器生成的类名)会被销毁。捕获的变量作为该类内的字段实现,因此它们也超出了范围并被释放。

但是你可能要注意这可能会导致内存泄漏,因为一些重要的事实,捕捉一些变量循环引用:

如果你有一个例行/方法都被实现内的多个匿名方法单个类(即ArcRec $ xxxx的东西)。因此,在这种情况下,具有最长生命周期的匿名方法可能会使另一个匿名方法仍然存在,即使该方法已超出范围。

+1

我已经收集到它将类似于对接口的引用,但至少有一个接口让我有机会在类析构函数中放入一些代码来确保。这里有一种温和的偏执狂。 – Domus