AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Tform und free

Ein Thema von R2009 · begonnen am 28. Okt 2010 · letzter Beitrag vom 28. Okt 2010
Antwort Antwort
Benutzerbild von sx2008
sx2008

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

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
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#2

AW: Problem mit Tform und free

  Alt 28. Okt 2010, 11:28
Hallo sx2008,

klasse Beitrag von Dir, sowohl inhaltlich als auch vom Aufbau. Danke !

Grüße,
blauweiss
  Mit Zitat antworten Zitat
Patito

Registriert seit: 8. Sep 2006
108 Beiträge
 
#3

AW: Problem mit Tform und free

  Alt 28. Okt 2010, 12:28
Anzumerken ist noch, dass Release() in DLLs Probleme verursachen kann.

vgl:
http://entwickler-forum.de/showthread.php?t=24530

Daher sollte man auf die Verwendung von Release() wohl lieber gänzlich verzichten.

Anstatt ein Formulare in der eigenen Ereignisbehandlung zu entsorgen, sollte man die Erstellung/Entsorgung der Formulare lieber sauberer organisieren.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz