Im ARC wollte ich mal versuchen das möglichst alles "nativ" zu belassen.
Was hat das mit "nativ" zu tun?
Hier mal ein Beispiel, wo so eine WeakRef-Record für ARC sinnvoll verwendet werden kann:
Delphi-Quellcode:
function Foo( const ABitmap : TBitmap ):ITask;
var
LBitmapRef: WeakRef<TBitmap>;
begin
// WeakRef auf Bitmap
LBitmapRef := ABitmap;
Result := TTask.Create(
procedure
var
LBitmap : TBitmap;
begin
// StrongRef auf Bitmap, damit die bis zum Ende des Tasks überlebt, wenn es die noch gibt :o)
LBitmap := LBitmapRef;
// Wenn Bitmap schon weg ist, dann raus hier
if not Assigned( LBitmap ) then Exit;
// Now work on Bitmap
end );
end;
Du erzeugst also einen Task, der irgendwann gestartet werden soll. Die übergebene Bitmap kann aber bis zum echten Start schon wieder verschwunden sein. Ist die Bitmap beim Starten aber nicht verschwunden, dann wird im Task wieder eine Strong-Ref auf Bitmap gemacht und schon lebt die Referenz bis zum Ende des Tasks.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)