Junior — Middle
Wie wird der Speicher für Objekte mit zyklischen Referenzen in verwalteten Umgebungen freigegeben?
sobes.tech KI
Antwort von AI
In verwalteten Umgebungen wie iOS mit ARC (Automatisches Referenzzählen) erfolgt die Speicherfreigabe für Objekte mit zyklischen Referenzen nicht automatisch, da ARC keine Referenzzyklen auflösen kann.
Zur Lösung dieses Problems werden schwache (weak) und unbesitzende (unowned) Referenzen verwendet, die den Referenzzähler des Objekts nicht erhöhen. Dies ermöglicht das Durchbrechen der Zyklen und die korrekte Freigabe des Speichers.
Beispiel:
class Person {
var name: String
weak var apartment: Apartment? // schwache Referenz
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // unbesitzende Referenz
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Hier referenzieren sich Person und Apartment gegenseitig, aber eine der Referenzen ist schwach, was Speicherlecks verhindert.
Wenn die Referenzzyklen nicht durchbrochen werden, bleiben die Objekte im Speicher, trotz fehlender externer Referenzen, was zu Speicherlecks führt.