Ich hatte nun 'ne ganze Weile versucht damit einen "ordentlichen" Code hinzubekommen, welcher auf allen Platformen richtig funktioniert.
Also mit den aktuellen/alten Möglichkeiten der Delphi-Compiler
[Weak]
,
[Unsafe]
,
[Ref]
und
[Volatile]
.
Den Blick in
OH/Dokwiki könnt ihr vergessen, denn bei den Attributen ist nichts zu finden, aber es gibt einen anderen etwas versteckteren Hilfe-Eintrag dazu. (verlinken können die sowas natürlich nicht)
Fazit: Alles Mist und ich caste die Rückreferenzen nun überall nur noch selbst als Pointer.
Für "einfache" 1:1-Kreuzverlinkungen mit einfachen Variablen ist
[Weak]
und
[Unsafe]
im ARC allerdings ganz praktisch, auch wenn es keine richtig nicht-referenzgezählten Variablen gibt, wo es absolut keine Behandlung von Referenzen gibt.
Aber sobald Listen oder kompliziertere n:n-Verlinkungen ins Spiel kommen, ist es nahezu unmöglich einen "nativen" Code zu schreiben, der wirklich überall läuft und das auch nur mit ausreichenden IFDEFs oder über Fremdkomponenten.
Wenn ich bissl aufgeräumt und alles nochmal durchgelesen hab, dann werde ich demnächst mal meine Testanwendung/Testcode/Artikel für diese beiden "schwachen Referenzen" hochladen.
Leider gibt es
[Weak]
,
[Unsave]
und
[NoRefCount]
nicht in allen Platformen.
https://quality.embarcadero.com/browse/RSP-10135
Im Grunde ist das der Grund, warum ich einige Komponenten nun komplett und umständlich (da doppelte Deklarationen usw.) auf Interfaces umstelle, damit sie überall funktionieren und überall gleich benutzbar sind.
Grade bei den Interfaces gibt es nun, dank
[Weak]
und AutoRefCount (für interne Objekte), dennoch standardmäßig kein gleiches Verhalten, außer man sorgt selber auf brutalste Weise dafür.
(nur Interfaces ohne irgendwelche Objektreferenzen und ohne schwachen Referenzen arbeiten wirklich überall gleich)