Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Problem mit Tform und free

  Alt 28. Okt 2010, 08:28
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
  Mit Zitat antworten Zitat