Autor Beitrag
kampfkoloss23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 96



BeitragVerfasst: Mo 30.12.02 17:42 
Am Anfang lade ich ein Paar Bitmaps in Variablen in mein Programm.
Die Werden dann darin irgendwie in Timern und sonstigem benutzt.
Beim Beenden des Programms sollte ich sie dann "free" setzen, damit sie keinen Speicher mehr verbrauchen ?? Ist das Richtig?
Gibt es sonst noch was zu beachten?

Was für eine Rolle spielt denn dabei das Nil setzen?
Und zu guter letzt kann man sie auch noch destroyen, für was
ist das gut?


(Tschuldigung für die Fragen, aber in der Delphi Hilfe wurden sie
entweder nicht beantwortet, oder ich hab sie nicht verstanden)
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 31.12.02 06:22 
Zu Thema Destroy steht schon etwas gutes in der Hilfe:

Zitat:
Rufen Sie Destroy nicht direkt in einer Anwendung auf, sondern verwenden Sie Free. Die Methode Free überprüft zuerst, ob das Bitmap-Objekt nicht bereits freigegeben wurde, und ruft Destroy nur bei Bedarf auf.


Free ist besser, da es keine Fehlermeldung ausgibt wenn das Objekt bereits freigegeben wurde. Benutze also nur Free.

Nil brauchst du eigentlich auch nicht. Unter gewissen Umständen, z.B. wenn du mehrmals eine Objektvariable nutzt, so kann es von Vorteil sein die Variable nach dem Free auch Nil zu setzen. Wenn du das Objekt nur mit Free freigibst, dann zeigt die Objektvariable immer noch auf die Instanz (obwohl sie nicht mehr da ist). Wenn du in einer Prozedur dann mit IF Obj <> Nil THEN ... überprüfst ob das Objekt initialisiert worden ist, dann kriegst du eventuell ein falsches Ergebnis. Wenn du aber nach dem Free auch Obj := Nil setzt, dann wird die Obj Adresse gelöscht (bzw. Nil gesetzt). Bei einer IF Obj <> Nil THEN ... bist du dir dann ganz sicher ob das Objekt initialisiert ist oder nicht.

Das ganze brauchst du aber nicht wenn du die Variable nicht mehrmals benutzt. Falsch ist es aber auch nicht.
Addy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Di 31.12.02 11:20 
Wie überprüft Free, ob ein Objekt schon freigegeben wurde?
Ich nehme an, dass Free überprüft, ob Self = nil ist, falls nicht, wird das Objekt befreit :D
Deshalb nach object.Free immer object := nil angewöhnen, schaden kanns nicht (und wenn das Programm dann mal mehr als 1000 Zeilen, mehrere Units und Klassen, die alle irgendwie zusammenhängen etc. umfasst, wird es wahrscheinlich notwendig. Zudem lässt sich das Programm dann viel leichter debuggen).