![]() |
Frage zu FMX & ARC?
Hallo Zusammen!
Ich habe gerade eine tolle Fehlerquelle in meiner App (unter ARC) Windows - logischerweise - kein Problem... Vielleicht habe ich ja "nur" ein Denkfehler... :stupid: 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 :coder: |
AW: Fmx & arc
Closure? War da nicht was mit anonymen Methoden? Ich verstehe Closures nicht so ganz, aber ist das nicht ein (erwünschter) Nebeneffekt davon?
Sherlock |
AW: Fmx & arc
Zitat:
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 |
AW: Frage zu FMX & ARC?
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? |
AW: Frage zu FMX & ARC?
Zitat:
Mavarik |
AW: Frage zu FMX & ARC?
Seh ich das richtig?
Closure im Form, die auf Feldvariable des Forms zugreift? Riecht nach zirkulärer Refrenz durch implizites Capture von Self - siehe: ![]() 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. |
AW: Frage zu FMX & ARC?
Zitat:
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 |
AW: Frage zu FMX & ARC?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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