当我有一个TList(也就是“指向过程的引用”列表),并且我清空它时,所有在匿名方法中使用的捕获变量是否都会被释放,以避免内存泄漏?
也就是说,在清空TList时,是否会启用引用计数机制?
也就是说,在清空TList时,是否会启用引用计数机制?
委托类型与接口一样是引用计数的(实际上它们是作为接口来实现的)。这意味着,如果它们超出范围,幕后对象(您可能已经在某个地方看到过ArcRec $ xxxx的类名 - 这是编译器生成的类名)将被销毁。捕获的变量被实现为该类内部的字段,因此它们也会超出范围并被释放。
然而,您可能需要注意一些循环引用,这可能会导致由于一些重要事实而捕获的变量造成内存泄漏:
如果您在单个例程/方法中有多个匿名方法,则它们都由一个单独的类(即ArcRec $ xxxx)实现。因此,在这种情况下,具有最长寿命的匿名方法可能会使另一个匿名方法保持活动状态,即使它已经超出范围。