Zunächst einmal, empfehle ich Ihnen die Dokumentation aussehen, wenn Sie nicht bereits haben:
Automatic Reference Counting in Delphi Mobile Compilers.
Hier finden Sie eine vollständige Erläuterung zu diesem Thema.
Automatische Referenzzählung
Speicherverwaltung in Delphi ist nicht immer gleich, weil, wenn Sie einen ARC-fähigen Compiler verwenden, die Dinge ändern werden.
Um es kurz zu machen, ist ARC eine Möglichkeit, die Lebensdauer eines Objekts zu verwalten, ohne sich um ein Objekt kümmern zu müssen, das Sie nicht benötigen.
Dies ist, wie Sie normalerweise die Objekte verwenden (nicht ARC)
var
a: TMyNiceClass;
begin
a := TMyNiceClass.Create;
try
a.somethingToDo();
finally
a.Free;
end;
end;
Hier muss ich in einem try-finally
Block den Code setzen, so bin ich sicher, dass mein Objekt weggeht, wenn ich brauche es nicht mehr (und ich vermeide Speicherlecks). Stattdessen unter ARC:
var
a: TMyNiceClass;
begin
a := TMyNiceClass.Create;
a.somethingToDo();
end;
Der obige Code funktioniert gut, unter ARC, weil Sie nicht zu Free
und weder die try-finally
verwenden müssen, da sie „automatisch“ ist. Beachten Sie auch, dass der Destruktor aufgerufen wird, wenn Sie das Ende erreichen; Anweisung, aber wenn Sie aufhören möchten, das Objekt vor dem Ende zu verwenden, können Sie a := nil
verwenden.
Hinweis
Im traditionellen Stil Free
Aufruf ruft die destructor (es sei denn, der Verweis auf das Objekt war gleich Null), die Referenz auf das Objekt = nil die Free
weist in ARC-Stil.
Sie möchten wissen, ob Sie Free verwenden müssen oder nicht? –
Auch, weil ich sehe, dass ich es nicht verwenden kann und ich etwas mit Null tricksen muss ... aber der Versuch-endlich-Block verschwindet korrekt? –
Warum runter zu diesem Thema? –