AGB  ·  Datenschutz  ·  Impressum  







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

Forms & ARC "spielereien"

Ein Thema von Mavarik · begonnen am 1. Jul 2013 · letzter Beitrag vom 3. Jul 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Forms & ARC "spielereien"

  Alt 2. Jul 2013, 11:29
Das Problem fängt ja damit an, dass nach einem

F := TForm.Create(NIL)

F.Refcount = 2 ist.

Achso...

Und beim "Klassiker"

F := TForm.Create(Application)

F.Refcount = 4 ist.


Mavarik

Geändert von Mavarik ( 2. Jul 2013 um 12:34 Uhr)
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#12

AW: Forms & ARC "spielereien"

  Alt 2. Jul 2013, 12:49
Ich hätte eigentlich erwartet, dass "Show" den RefCount um einen erhöht, da es ja non-blocking ist.
Wenn man es mit Show gezeigt hat, sollte das Schließen den Zähler um 1 verringern.

Zumindest hätte ich das so angenommen. Wie soll das ja auch sonst funktionieren?
Wenn man es modal zeigt, dann sollte da nix passieren.

Wie es tatsächlich passiert? kA
Aber es ist irgendwo nicht schlecht, dass sich EMBT Gedanken macht, um ein bissel Garbage Collection zu erlauben. Denn mit dem alten Modell gab es ja die abstrusesten Konventionen um bloss keine Leaks zu erzeugen.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Forms & ARC "spielereien"

  Alt 2. Jul 2013, 13:58
Ich hätte eigentlich erwartet, dass "Show" den RefCount um einen erhöht, da es ja non-blocking ist.
Wenn man es mit Show gezeigt hat, sollte das Schließen den Zähler um 1 verringern.
Das Problem ist, wie soll man sauber alles free(n), wenn irgendwo versteckte Referenzen sind.

Show ändert (natürlich) nicht den RefCounter...

Das blöde ist, wenn man die Referenzen killt um alles sauber zu machen, greift Firemonkey immer noch an irgend einer Stelle auf das Formular zu
um noch eine Animation ab zu schließen oder was auch immer...

Und dann knallt es..

Mavarik
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Forms & ARC "spielereien"

  Alt 2. Jul 2013, 14:08
Dann trenne Deine Business-Logik vom FMX-Framework. An einem Punkt X, an dem Deine App der Ansicht ist, das Formular könne weg, räumt sie alles, was sie selbst erzeugt hat, auch wieder ab und gibt den Rest an FMX zurück. Mehr kann man letztlich eh nicht tun und was dann übrig bleibt, kann nicht mehr gravierend viel Speicher kosten.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Forms & ARC "spielereien"

  Alt 2. Jul 2013, 14:42
Dann trenne Deine Business-Logik vom FMX-Framework. An einem Punkt X, an dem Deine App der Ansicht ist, das Formular könne weg, räumt sie alles, was sie selbst erzeugt hat, auch wieder ab und gibt den Rest an FMX zurück. Mehr kann man letztlich eh nicht tun und was dann übrig bleibt, kann nicht mehr gravierend viel Speicher kosten.
Tja das ist aber auch nur ein Workaround!

Hab jetzt - auf Olaf's Rat - mal das Form mit Release freigegeben...

Das sieht recht gut aus...

Fenster mit Show anzeigen und danach über einen Fensterhandler wieder schliessen...

Also ein weiteren Test in einer For-Schleife!

so ab dem 25. Form.Show und Close über einen Fensterhandler wird der iPhone Bildschirm zwischen durch schwarz
und der Show kommt immer verzögerter... bei 35 Form Show#s: Exception in System.pas in _DbgExcNotify

Also das war es auch noch nicht...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Forms & ARC "spielereien"

  Alt 2. Jul 2013, 15:00
Ich denke jetzt einfach mal laut:

Ein iOS Device ist ja nun mal kein MultiWindow-Anzeiger, sondern es wird immer nur eine View angezeigt.

Daraus ergibt sich, dass jede View als Singleton implementiert werden könnte/angesehen werden kann. Die anzuzeigenden Daten übergibt man der View mit einem ViewModel und lässt die View anzeigen.

Die Views müssen dabei nicht direkt alle beim Start erzeugt werden, aber wenn einmal erzeugt, dann immer wieder verwenden.

Einen Controller gebaut der das ViewModel bekommt, darüber die View auswählt und anzeigt.
Damit kann dann auch die nette Zurück-Funktion implementiert werden
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Forms & ARC "spielereien"

  Alt 2. Jul 2013, 15:19
Ich denke jetzt einfach mal laut:

Ein iOS Device ist ja nun mal kein MultiWindow-Anzeiger, sondern es wird immer nur eine View angezeigt.

Daraus ergibt sich, dass jede View als Singleton implementiert werden könnte/angesehen werden kann. Die anzuzeigenden Daten übergibt man der View mit einem ViewModel und lässt die View anzeigen.

Die Views müssen dabei nicht direkt alle beim Start erzeugt werden, aber wenn einmal erzeugt, dann immer wieder verwenden.

Einen Controller gebaut der das ViewModel bekommt, darüber die View auswählt und anzeigt.
Damit kann dann auch die nette Zurück-Funktion implementiert werden
OK gebe ich Dir 100%ig Recht!

Frei nach dem Motto... Lass die Form's doch rumgammeln... Der nächste App-Kill Event vom iOS wird es richten...

Mavarik
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#18

AW: Forms & ARC "spielereien"

  Alt 3. Jul 2013, 20:55
So ich habe es mal getestet und alles geht wie man es gelernt (war mal beim Forumschef in einer Schulung zu iOS ....):

zuerst die zu erzeugende Form:

Code:
type
  TFM_Debug = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FM_Debug: TFM_Debug;

implementation

uses unit1;

{$R *.fmx}

procedure TFM_Debug.FormCreate(Sender: TObject);
begin
 Label1.Text:=self.Name;
 Form1.Memo1.Lines.Add('Create '+Label1.Text);
end;

procedure TFM_Debug.FormDestroy(Sender: TObject);
begin
 Form1.Memo1.Lines.Add('Destroy '+Label1.Text);
end;
Nun das Hauptfenster mit der Debugausgabe:

Code:
uses Unit2;

var FDebug : array of TFM_Debug;

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
 var i:integer;
begin
 FDebug:=nil;
 SetLength(FDebug,Trunc(SpinBox1.Value));
 for I := 0 to length(FDebug)-1 do begin
  FDebug[i]:=TFM_Debug.Create(self);
 end;
 Button1.Enabled:=False;
 Button2.Enabled:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
 var i:integer;
begin
 for I := 0 to length(FDebug)-1 do begin
  FDebug[i].Close;
  FDebug[i].Release;
 end;
 Memo1.Lines.Add('alle released now Nil');
 FDebug:=nil;
 Button1.Enabled:=True;
 Button2.Enabled:=False;
end;
Im Screenshot seht man das der Destory erst kommt, wenn ich das Array indem ich die Forms ablegt = nil setzte , vorher nicht, da noch eine Refernz darauf besteht
Miniaturansicht angehängter Grafiken
bildschirmfoto-2013-07-03-um-20.50.16.png  
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Forms & ARC "spielereien"

  Alt 3. Jul 2013, 21:41
@arnof

Aber so hast du das bestimmt nicht bei Cheffe gelernt (s. Form1 )
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#20

AW: Forms & ARC "spielereien"

  Alt 3. Jul 2013, 22:36
@arnof

Aber so hast du das bestimmt nicht bei Cheffe gelernt (s. Form1 )
war ja für könner mit viel bla bla zu ARC, den ich erstmal keine große Beachtung Geschenk hatte, aber wie es so ist, dann fliegt einem der Kram um die Ohren ....

siehe

http://www.delphipraxis.net/174930-i...r-bug-arc.html
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16:26 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