众所周知(???)Delphi 对接口对象的接口引用进行引用计数,并在引用计数降至零时销毁该对象,通常是因为所有相关的接口变量都超出了范围。
假设我使用全局接口变量来引用持久对象:
type
tMySyncClass = class(TInterfacedObject,TmyInterface); ...
tMyAsyncClass = class(TInterfacedObject,TmyInterface); ...
var MyInterfaceVar : TmyInterface;
procedure MyProc();
begin
MyInterfaceVar := tMySyncClass.create();
....
MyInterfaceVar := tMyAsyncClass.create();
end
调用
MyProc
后,我有一个 tMyAsyncClass
的实例,带有一个(全局)MyInterface
引用。
我还有未引用的
MySyncClass
对象吗?重新分配 MyInterfaceVar
是否会触发第一个 (SyncClass
) 对象的销毁?
是的,重新分配
MyInterfaceVar
变量将删除对 tMySyncClass
对象的引用,减少其引用计数,从而释放该对象,因为它不再有活动引用。