AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Frage zu FMX & ARC?

Ein Thema von Mavarik · begonnen am 6. Mär 2017 · letzter Beitrag vom 6. Mär 2017
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

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

Frage zu FMX & ARC?

  Alt 6. Mär 2017, 12:08
Hallo Zusammen!

Ich habe gerade eine tolle Fehlerquelle in meiner App (unter ARC) Windows - logischerweise - kein Problem...

Vielleicht habe ich ja "nur" ein Denkfehler...

Ich habe in einer Form eine locale Variable "FWhatever : TMyClassFoo".

Diese Variable wird im Create erzeugt und erst im Destroy wieder frei gegeben... Kein anderer hat eine Referenz darauf.

Wenn ich jetzt von außen eine Message sende und in der Empfangsroutine (locale anonyme Procedure in der Form)
auf FWhatever zugreifen will ist FWhatever = NIL... Strange...

Ich habe jetzt probeweise die Variable in der Formunit als VAR (global) definiert. Das Form erzeugt und killt die Instance wie bisher...

Fehler weg...

Sonst ist keine "Magic" drum-rum, daher auch kein Codesnipit... Hat jemand ne Idee wo mein Denkfehler ist?

Grüsse

Mavarik

Geändert von Mavarik ( 6. Mär 2017 um 12:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.553 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Fmx & arc

  Alt 6. Mär 2017, 12:10
Closure? War da nicht was mit anonymen Methoden? Ich verstehe Closures nicht so ganz, aber ist das nicht ein (erwünschter) Nebeneffekt davon?

Sherlock
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Fmx & arc

  Alt 6. Mär 2017, 12:15
Closure? War da nicht was mit anonymen Methoden? Ich verstehe Closures nicht so ganz, aber ist das nicht ein (erwünschter) Nebeneffekt davon?

Sherlock
Ja, Eben?!?

Die anonyme Methode sollt (bleibt) solange im Speicher, bis keine Variable mehr die darin verwendet wird eine Reference hat... (Tut sie ja auch). Aber das Form sollte doch so lange es existiert die Variable halten... Nicht auf keinen Fall frei geben - oder verstehe ich das nicht?

Mavarik
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
2.812 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Frage zu FMX & ARC?

  Alt 6. Mär 2017, 13:34
Existiert denn absolut gesichert die Form noch zum Zeitpunkt des Empfangs im Empfangs-Closure?
Vielleicht ist die Form auch durch ARC freigeben, weil die auf keinen Feld/Member-Variablen hängt.
Erstelle mal parallel ein FMyObject: TObject und prüfe, ob die Instanz hier auch nil ist.

Funktioniert es denn, wenn du aus der anonyme Procedure eine richtige Klassenmethode machst?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Frage zu FMX & ARC?

  Alt 6. Mär 2017, 13:49
Existiert denn absolut gesichert die Form noch zum Zeitpunkt des Empfangs im Empfangs-Closure?
Vielleicht ist die Form auch durch ARC freigeben, weil die auf keinen Feld/Member-Variablen hängt.
Erstelle mal parallel ein FMyObject: TObject und prüfe, ob die Instanz hier auch nil ist.

Funktioniert es denn, wenn du aus der anonyme Procedure eine richtige Klassenmethode machst?
OK! 2 gute Fragen/Ideen... Muss ich testen...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.834 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Frage zu FMX & ARC?

  Alt 6. Mär 2017, 15:05
Seh ich das richtig?
Closure im Form, die auf Feldvariable des Forms zugreift?

Riecht nach zirkulärer Refrenz durch implizites Capture von Self - siehe: https://quality.embarcadero.com/browse/RSP-10176

Wenn nun dein FormDestroy läuft und nicht die anonyme Methode explizit auf nil setzt, bleibt sie am Leben, <implites captured Self>.FWhatever zeigt aber nun auf nil.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Frage zu FMX & ARC?

  Alt 6. Mär 2017, 15:25
Seh ich das richtig?
Closure im Form, die auf Feldvariable des Forms zugreift?

Riecht nach zirkulärer Refrenz durch implizites Capture von Self - siehe: https://quality.embarcadero.com/browse/RSP-10176

Wenn nun dein FormDestroy läuft und nicht die anonyme Methode explizit auf nil setzt, bleibt sie am Leben, <implites captured Self>.FWhatever zeigt aber nun auf nil.
OK... Versteh ich...

Aber in FormDestory Unregistriere ich den MessageType also sollte der MessageHandler diese procedure nicht mehr aufrufen und bei einem neuen Create sollte dann doch eine neue Procedure im Speicher liegen und die Variable wieder initialisiert sein, oder? (Abgesehen vom Mem-Leak)

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.834 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Frage zu FMX & ARC?

  Alt 6. Mär 2017, 16:18
Sonst ist keine "Magic" drum-rum, daher auch kein Codesnipit...
Wär wohl einfacher, den Code zu posten, als stundenlang hin und her zu raten
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 07:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf