dav*_*vid 1 delphi interface reference
众所周知(???),Delphi 对接口对象的接口引用进行引用计数,并在其引用计数降至零时销毁这些对象,通常是因为所有相关的接口变量都超出了范围。
假设我使用全局接口变量来引用持久对象:
type
tMySyncClass = class(TInterfacedObject,TmyInterface); ...
tMyAsyncClass = class(TInterfacedObject,TmyInterface); ...
var MyInterfaceVar : TmyInterface;
procedure MyProc();
begin
MyInterfaceVar := tMySyncClass.create();
....
MyInterfaceVar := tMyAsyncClass.create();
end
Run Code Online (Sandbox Code Playgroud)
调用 后MyProc,我有一个 的实例,并对其进行了tMyAsyncClass一个(全局)引用。MyInterface
我还有一个未引用的MySyncClass对象吗?重新分配是否会MyInterfaceVar触发第一个 ( SyncClass) 对象的销毁?
将接口对象分配给接口变量将增加所分配对象的引用计数,并减少该变量先前引用的对象的引用计数。
所以,是的,重新分配MyInterfaceVar变量将删除对该tMySyncClass对象的引用,减少其引用计数,从而释放该对象,因为它没有更多的活动引用。