Sobes.tech
Junior — Middle

Kann eine starke Referenz in einer Entität zu Speicherlecks führen?

sobes.tech KI

Antwort von AI

Ja, das Vorhandensein starker Referenzen zwischen Objekten in iOS kann zu Speicherlecks führen, insbesondere wenn eine zyklische Referenz (Retain Cycle) entsteht. Dies passiert, wenn zwei Objekte sich gegenseitig durch starke Referenzen halten, und das ARC-System sie nicht freigeben kann, da der Referenzzähler beider nicht auf null sinkt.

Um solche Lecks zu vermeiden, verwendet man schwache (weak) oder unbesitzende (unowned) Referenzen, die den Referenzzähler nicht erhöhen und den Zyklus durchbrechen können.

Beispiel für einen Zyklus:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // hier entsteht ein Retain Cycle

Um das Leck zu vermeiden, kann man eine der Referenzen schwach machen:

class Apartment {
    weak var tenant: Person?
}