Junior — Middle
Ist es möglich, zyklische Referenzen zu haben, die die Garbage Collection in einem automatischen Speicherverwaltungssystem verhindern?
sobes.tech KI
Antwort von AI
Ja, in iOS kann bei Verwendung der automatischen Speicherverwaltung (ARC) die Entstehung von Zyklen (retain cycles) auftreten. Dies passiert, wenn zwei oder mehr Objekte sich gegenseitig durch starke Referenzen halten, wodurch der Referenzzähler nicht auf null sinkt und die Objekte nicht freigegeben werden.
Um solche Situationen zu vermeiden, verwendet man schwache (weak) oder unbesitzende (unowned) Referenzen. Zum Beispiel werden Delegates in der Regel als weak deklariert, um Zyklen vorzubeugen.
Beispiel:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // schwache Referenz verhindert Zyklus
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
In diesem Beispiel ist tenant eine schwache Referenz, daher entsteht kein Zyklus, und die Objekte werden vom Garbage Collector korrekt freigegeben.