AGB  ·  Datenschutz  ·  Impressum  







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

Object richtig freigeben

Ein Thema von derseitzer · begonnen am 14. Jun 2017 · letzter Beitrag vom 14. Jun 2017
Antwort Antwort
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Object richtig freigeben

  Alt 14. Jun 2017, 01:12
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
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Object richtig freigeben

  Alt 14. Jun 2017, 07:51
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.

Oder hast du noch andere Merkwürdigkeiten, weswegen du der Meinung bist, dass das Objekt noch existiert?
Peter
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Object richtig freigeben

  Alt 14. Jun 2017, 08:02
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 Objekt.Parent.RemoveObject(Objekt) benutzen, falls du unterschiedliche Parents hast.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Object richtig freigeben

  Alt 14. Jun 2017, 14:45
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
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#5

AW: Object richtig freigeben

  Alt 14. Jun 2017, 15:05
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
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
533 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Object richtig freigeben

  Alt 14. Jun 2017, 15:21

Ein Prüfung auf (..) Assigned wird bei Free nicht funktionieren, da Free den Zeiger nicht auf Nil setzt.
Wirklich?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Object richtig freigeben

  Alt 14. Jun 2017, 15:35

Ein Prüfung auf (..) Assigned wird bei Free nicht funktionieren, da Free den Zeiger nicht auf Nil setzt.
Wirklich?
Ja, wirklich. Ich finde das eigentlich auch vernünftig und verwende grundsätzlich nur Free und nicht FreeAndNil. FreeAndNil wiegt einen nur in falscher Sicherheit, da es ja auch noch weitere Referenzen auf das Objekt geben kann, die von FreeAndNil nicht auf nil gesetzt werden.

Delphi-Quellcode:
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;
Edit: Nur zur Klarstellung, das bezieht sich jetzt natürlich auf klassisches Delphi, nicht auf ARC.
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: Object richtig freigeben

  Alt 14. Jun 2017, 15:41
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
  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 11:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz