4
当我有一个TList(所以,“引用过程”的列表),并且我清除它时,匿名方法中使用的所有捕获的变量是否被释放,因此不会发生泄漏?做一个TList <TProc>。清除所有捕获的变量?
即,在清除TList时是否有效参考计数?
当我有一个TList(所以,“引用过程”的列表),并且我清除它时,匿名方法中使用的所有捕获的变量是否被释放,因此不会发生泄漏?做一个TList <TProc>。清除所有捕获的变量?
即,在清除TList时是否有效参考计数?
委托类型与接口一样被引用计数(实际上它们被实现为接口)。这意味着,如果它们超出了范围,那么幕后的对象(您可能已经看到ArcRec $ xxxx的某处提到了 - 这是编译器生成的类名)会被销毁。捕获的变量作为该类内的字段实现,因此它们也超出了范围并被释放。
但是你可能要注意这可能会导致内存泄漏,因为一些重要的事实,捕捉一些变量循环引用:
如果你有一个例行/方法都被实现内的多个匿名方法单个类(即ArcRec $ xxxx的东西)。因此,在这种情况下,具有最长生命周期的匿名方法可能会使另一个匿名方法仍然存在,即使该方法已超出范围。
我已经收集到它将类似于对接口的引用,但至少有一个接口让我有机会在类析构函数中放入一些代码来确保。这里有一种温和的偏执狂。 – Domus