Gagasan di balik unit ini adalah memberikan siklus hidup yang serupa dengan referensi objek yang dihitung di Delphi seperti yang dilakukan dengan lemah di .net.
Referensi Objek yang dihitung di Delphi memiliki beberapa batasan ketika datang ke referensi melingkar, di mana misalnya referensi TPARENT anak -anak (melalui Ichild), dan referensi tchild adalah orangtua (melalui Iparent). Jika kami menghapus referensi eksternal apa pun ke instance iParent dan Ichild kami tanpa terlebih dahulu membuat anak menghapus referensi ke Iparent, kami akan berakhir dengan objek yatim. Ini karena instance Ichild dan Iparent kami memegang referensi satu sama lain, dan dengan demikian mereka tidak pernah dirilis.
Kelas yang dapat dirujuk lemah perlu turun dari 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;
Dalam contoh di atas, jika objek induk dihancurkan di hadapan anak, referensi yang lemah di dalam objek anak akan ditandai sebagai nihil (jadi. ISalive Mengembalikan false).