Willkommen in der
DP
Zitat:
Wenn das normale Objekt(befindet sich in einem Array) mit .free /.freeandnil / .destroy freigegeben wird,
wird das ObjektX scheinbar mitgelöscht, wodurch es beim Erstellen eines neuen
normales Objekts zu einer Zugriffsverletzung kommt.
Den Abschnitt verstehe ich nicht ganz. Was ist das „Objekt“, und was ist das „ObjektX“? Ist beides das gleiche Objekt, sind es unterschiedliche Objekte? Wo wird was „mitgelöscht“ und was heißt hier „scheinbar“?
Grundsätzlich kann man die automatische Freigabe eines Objektes hinter einem Interface verhindern, indem man manuell seine Methode
AddRef
aufruft. Dadurch wird der Referenzzähler um 1 erhöht und somit nicht 0 (was eine Zerstörung des Objekts auslösen würde), nachdem das letzte Interface gelöscht wurde.
Aber, meine Empfehlung: Wenn Interfaces, dann konsequent. Nicht Interfaces mit normalem Objektzugriff mischen. Das macht nur Kopfschmerzen. Also stell lieber die Stellen, wo du noch direkt auf das Objekt zugreifst, auch auf Interfaces um, dann hast du das Problem nicht und die Referenzzählung erledigt alles automatisch (nur bei zyklischen Referenzen musst du aufpassen).