Wir hätten also 4 Wege um ein Formular freizugeben:
1.) Destroy
2.) Free
3.) FreeAndNil
4.) Release
Was soll man jetzt nehmen?
Destroy darf man nur aufrufen, wenn man 1000% sicher ist, dass das Objekt exisitiert:
Delphi-Quellcode:
var Form: TForm_Adressing; // lokale Variable
begin
Form := TForm_Adressing.Create(NIL);
try
Form.ShowModal;
finally
Form.Destroy; // erlaubt, da garantiert ist dass "Form" <> nil
end;
Mit Destroy kann man einige CPU-Zyklen sparen; allerdings sollte man doch besser Free verwenden.
Wir streichen also Destroy aus unserem Spielraum und merken uns dass man Destroy theoretisch verwenden kann.
FreeAndNil macht dann Sinn, wenn die Objektvariable nicht lokal, sondern global ist und ausserdem an anderen Stellen im Sourcecode mit Assigned abgeprüft wird.
Lokale Objekte werden immer mit
Free freigegeben.
Dies gilt auch für globale Formularobjekte, wenn man sicher ist, dass nirgends mehr
auf diese Variable zugegriffen wird.
Release ist wiederum eine ganz spezielle Methode.
Wenn man z.B. mitten im OnClick-Event eines Formulars ist und Free aufrufen würde,
dann würde man sich das Objekt unterm Hintern weglöschen.
Mit der Folge einer Zugriffsverletzung.
Release schickt eine Windows-Message an das eigene Formular.
Diese Message wird erst empfangen und verarbeitet, wenn das Formular alle anderen
Messages verarbeitet hat.
Wir halten fest:
Destroy - Finger weg
Free - die Standardmethode
FreeAndNil - sparsam einsetzen; nur dort wo es Sinn macht
Release - nur verwenden, wenn das Formular sich selbst aus einem Event heraus freigeben möchte