AGB  ·  Datenschutz  ·  Impressum  







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

FreeandNilProperties?

Ein Thema von Mattze · begonnen am 10. Dez 2008 · letzter Beitrag vom 11. Dez 2008
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

FreeandNilProperties?

  Alt 10. Dez 2008, 18:04
Hi,

die Überschrift sagt ja nicht viel aus, aber:
Gibt es etwas, was beim Freigeben (z. B. eines Panels) auch die "Unterkomponenten" davon nicht nur frei gibt, sondern auch auf Nil setzt?
Oder wie kann man das am günstigsten machen (also ohne alle Komponenten vorher per Hand freigeben und auf nil setzen zu müssen)?

("FreeandNilProperties" gibt's übrigens wirklich. Aber leider...)

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

Re: FreeandNilProperties?

  Alt 10. Dez 2008, 18:06
ich denke nicht, dass das so direkt geht, da es durchaus momente gibt, in denen du die "unterkomponenten" auch noch brauchen kannst. wird wohl eigene arbeit von nöten sein, d.h. nachschauen, ob eine komponente auf z.b. einem panel liegt und es dann entsprechend auch freigeben.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: FreeandNilProperties?

  Alt 10. Dez 2008, 18:16
Zitat:
Gibt es etwas, was beim Freigeben (z. B. eines Panels) auch die "Unterkomponenten" davon nicht nur frei gibt, sondern auch auf Nil setzt?
Wenn das Panel der Owner der Unterkomponenten ist, geschieht das automatisch. Das auf Nil setrzten geht so natürlich nicht
Markus Kinzler
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

Re: FreeandNilProperties?

  Alt 10. Dez 2008, 20:44
Hi,

nun, freeandnilproperties macht das für Objekte. Die Hilfe schreibt aber:
"AObject (der Parameter - d. Red.) muss ein CLX-Objekt sein, das mit RTTI (Laufzeittypinformation) compiliert wird."

Theoretisch könnte man auch die Komponentenliste durchlaufen und selber alles (was geht) freigeben und auf nil setzen. Ist bloß ziemlicher Aufwand für die Laufzeit.
Ich frage mich, wie das zeitmäßig am günstigsten ist...

Ich habe z. B. ein Panel auf dem "duzenderweise" verschiedene andere Komponenten erzeugt werden. Und zwar zu verschiedenen Zeitpunkten verschiedene.
Mal ein MPlayer, mal ein Image, mal ein OLE-Container, mal ein Richedit usw.
Diese Dinger müssen "genilt" werden, wenn ich das Panel freigebe.
Man kann zwar für jede mögliche Komponente im Destroy ein freeandnil geben, aber dann macht man das 99 mal sinnlos und nur einmal korrekt...
Und woanders gebe ich nur etwas frei, was an dieser Stelle nicht benutzt wird. Da muss dann auch wieder eine Liste von freeandnil stehen. Alles sehr unelegant! Es wäre schön, wenn ich das "in einem Rutsch" erledigen könnte.

Deswegen meine Frage!

(Aber eigentlich auch Quatsch, weil es intern ja auch nix anderes wäre als das freeandnil für jede mögliche Komponente aufzurufen. Dann muss ich mir die Schreibarbeit halt machen...)

Gruß
Mattze
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: FreeandNilProperties?

  Alt 10. Dez 2008, 20:49
Wenn schon dynamisch, dann komplett. Weise alle Komponenten auf dem Panel das Panel als Owner zu.
Markus Kinzler
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#6

Re: FreeandNilProperties?

  Alt 10. Dez 2008, 23:04
Hi Matze,

Zitat von Mattze:
Gibt es etwas, was beim Freigeben (z. B. eines Panels) auch die "Unterkomponenten" davon nicht nur frei gibt, sondern auch auf Nil setzt?
Was genau willst Du denn damit bezwecken? Bei Komponenten werden meines Wissens alle untergeordneten Komponenten freigegeben, wenn die Vaterkomponente befreit wird. Wenn Du eigene Klassen hast, kannst Du Deine Unterklassen in einer TObjectList sammeln, dann werden auch alle Elemente der TObjectList befreit, wenn Du die Liste löschst bzw. leerst.

Oder habe ich Deine Anfrage missverstanden?

Gruß,
SirTwist
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#7

Re: FreeandNilProperties?

  Alt 11. Dez 2008, 09:33
Hallo,

nun, ich will damit genau das bezwecken, was ich geschrieben habe.
Diese Komponenten auf dem Panel MÜSSEN beim Freimachen auf nil werden! Sonst greife ich später durch Parallelverarbeitung auf diese Komponenten zu. Das ist anders nicht zu lösen!
(Die Panelkomponenten, die nicht nil sein müssen, "nile" ich auch nicht!)
Mit einer Objektlist muss ich das gleiche machen, was ich eigentlich nicht wollte, nun aber dann doch machen werde: Eine längere Liste von freeandnil vor dem freeandnil des Panels.
(Außerdem würde die Objektlist hier wahrscheinlich nicht passen. Das wäre "den Teufel mit dem Belzebub austreiben". Sprich: Das wäre letztendlich viel mehr als nötig.)

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: FreeandNilProperties?

  Alt 11. Dez 2008, 10:03
ein FreeAndNil kann nie von der Komponente ausgehen da diese nicht wissen kann wo überall Pointer auf die Instanz liegen.
Beispiel:
Delphi-Quellcode:
var
  a,b,c,d,e,f,g: TYourObject;
[...]
  a := TYourObject.Create();
  b := a;
  c := a;
  d := a;
  e := a;
  f := a;
  g := a;
[...]
destructor TYourObject.Destroy();
begin
  //woher soll die Objectinstanz an der Stelel wissen das es a,b,c,d,e,f und g gibt?
  inherited;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: FreeandNilProperties?

  Alt 11. Dez 2008, 10:07
Wie schon mal geschrieben, wenn schon dynamisch, dann vollständig dynamisch! Die kennt ja nicht die Referenzvariablen, die Teil einer anderen Klasse sind, welche sie referenzieren.
Markus Kinzler
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#10

Re: FreeandNilProperties?

  Alt 11. Dez 2008, 11:34
Du hast also an mehreren Stellen Pointer auf Deine Unterkomponenten gespeichert? Nun, das geht wirklich nicht, die alle auf nil zu setzen, dafür musst Du schon in deiner Programmlogik sorgen. Das ist aber insgesamt Topfschlagen im Minenfeld: wie stellst Du sicher, dass Du nicht an mehreren Stellen auf das selbe Objekt ein FreeAndNil() ausführst?

In lokalen Variablen okay, aber global in mehreren Variablen Pointer auf jeweils dieselben Objekte zu speichern, ist ähm sehr gewagt.

Gruß,
SirTwist
  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 14:40 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