![]() |
Object richtig freigeben
Ich erstelle immer wieder 3D Objekte auf meinem 3D Formular und möchte diese freigeben (auf buttonklick) und wieder ein neues erstellen.
1. Versuch: Objekt.free: hat nicht den erfolg gebracht den ich mir erwünschte, da das alte objekt immernoch da war und ich dann 2 objekte erstellt habe. 2. versuch: Objekt.destroy: funktioniert ca. 2-4 mal und dann stürzt mein Programm ab..:/ Wie gibt man ein Objekt richtig frei, damit mein Programm richtig läuft :)? MFG |
AW: Object richtig freigeben
Dein Versuch 1 ist richtig.
Wie kommst du darauf, dass das Objekt danach noch existiert? Ein Prüfung auf Nil oder mit Assigned wird bei Free nicht funktionieren, da Free den Zeiger nicht auf Nil setzt. Man meint also, dass das Objekt noch existiert. Es kann sogar passieren, dass man noch auf Eigenschaften des gelöschten Objekts zugreifen kann. Abhilfe schafft FreeAndNil(Objekt) oder das Wissen, mit dem Phänomen richtig umgehen zu können. :wink: Oder hast du noch andere Merkwürdigkeiten, weswegen du der Meinung bist, dass das Objekt noch existiert? |
AW: Object richtig freigeben
Ich rate einmal, dass es um ein mobiles Projekt geht (iOS, Android)?
Da ist dann nämlich ARC aktiv und Free gibt das Objekt nicht wirklich frei. Ich würde dann einfach das Objekt von der Oberfläche entfernen. Das sollte mit RemoveObject (Methode des Formulars) funktionieren. Du kannst auch
Delphi-Quellcode:
benutzen, falls du unterschiedliche Parents hast.
Objekt.Parent.RemoveObject(Objekt)
|
AW: Object richtig freigeben
Ja es geht um ein Android Projekt und ich weiß das das Objekt immernoch existiert, da ich es auf meinem Screen sehe.
Ich erstelle eine TSphere, mit dem "löschen" button, soll diese gelöscht werden und eine neue Created werden (z.B. ein Quader oder sonstwas..) wenn ich das Objekt nur freigebe (Objekt.Free), ist es visuell immernoch sichtbar, dann habe ich 2 Objekte auf meinem 3D-Formular. ich probiere gerade herum und schaue ob ich mit euren Befehlen eine Lösung finde:) erstmal vielen Dank |
AW: Object richtig freigeben
Wie Sebastian schon schrieb.
Android ist ARC, und obj.Free macht gar nichts. Wenn du wirklich sicher bist das du es löschen wilst/musst dan geht das mit obj.DisposeOf Rollo |
AW: Object richtig freigeben
Zitat:
|
AW: Object richtig freigeben
Zitat:
Delphi-Quellcode:
Edit: Nur zur Klarstellung, das bezieht sich jetzt natürlich auf klassisches Delphi, nicht auf ARC.
var
x,y: TObject; begin x := TObject.Create; y := x; FreeAndNil(x); if Assigned(x) then WriteLn('x assigned'); if Assigned(y) then WriteLn('y assigned'); end; |
AW: Object richtig freigeben
Also Vielen Dank an euch alle, wieder was gelernt!
Rollo62 Vielen Dank, Disposeof klappt super! Free bewirkt leider nichts und mit Destroy stürzt mein Programm nach ein paar malen ab. Vielen Dank:) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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