Forum: Cross-Platform-Entwicklung
by jaenicke,
22. Aug 2021
Du solltest dann nur nicht die von dir erwähnte Freigabe mit Free am Ende (im Destruktor der Klasse, in der sich das Feld befindet) vergessen. Ohne Referenzzählung funktionieren die Instanzen ja wie einfache Objekte und müssen entsprechend auch normal freigegeben werden.
Forum: Cross-Platform-Entwicklung
by jaenicke,
22. Aug 2021
Wenn du die Instanz in einer Objektreferenz speicherst, darfst du entweder nie (!) das Interface verwenden oder du musst die Referenzzählung in der Klasse deaktivieren (sprich statt TInterfaceObject als Basisklasse einfach TSingletonImplementation aus System.Generics.Defaults verwenden).
Ja, eindeutig. Du kannst auch ein zweites Interface dafür verwenden und mit as / Supports casten, wenn...
Forum: Cross-Platform-Entwicklung
by jaenicke,
20. Aug 2021
Bei einer eigenen Klasse, die das Interface implementiert, ist das sehr einfach:
Überschreibe einfach _Release und setze dort einen Haltepunkt.
Eine mögliche Ursache:
Du übergibst ein Objekt direkt über den Aufruf des Konstruktors als konstanten Parameter.
procedure Blub(const AData: IInterface);
...
Blub(TMyClass.Create);
An der Stelle funktioniert die Referenzzählung nicht korrekt,...