Sobes.tech
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.