VSoft.WeakReferences
v0.1.5
이 장치의 배후에있는 아이디어는 .NET에서 약한 회의와 마찬가지로 델파이의 계수 된 객체를 참조하는 것과 유사한 수명주기를 제공하는 것입니다.
델파이의 참조 계수 객체는 원형 참조와 관련하여 몇 가지 제한 사항이 있으며, 예를 들어 TPARENT 참조는 어린이 (ICHILD를 통해) 및 tchild 참조는 부모 (iparent를 통해)의 참조를 참조합니다. 아이가 iParent에 대한 참조를 제거하도록 먼저 IPARENT 및 ICHILD 사례에 대한 외부 참조를 제거하면 결국 고아의 물체가됩니다. 우리의 Ichild와 iparent 인스턴스가 서로 참조를하고 있기 때문에 결코 풀리지 않기 때문입니다.
약한 수업은 TWeakReferencedObject 할 수 있습니다.
type
TParent = class(TWeakReferencedObject, IParent)
...
end;
TChild = class(TInterfacedObject, IChild)
private
FParent : IWeakReference<IParent>;
protected
procedure SetParent(const parent : IParent);
function GetParent : IParent;
public
property Parent : IParent read GetParent write SetParent;
end;
implementation
procedure TChild.SetParent(const parent : IParent);
begin
if parent <> nil then
FParent := TWeakReference<IParent>.Create(parent)
else
FParent := nil;
end;
function TChild.GetParent : IParent;
begin
result := nil
if (FParent <> nil) and FParent.IsAlive then
result := FParent.Data;
end;
위의 예에서, 부모 객체가 자식 앞에서 파괴되면, 자식 물체의 약한 참조는 nil로 표시됩니다 (따라서 .isalive는 false를 반환합니다).