Sobes.tech
Junior — Middle

Čím se liší typy odkazů Strong a Weak v řízení paměti a modelu odkazů?

sobes.tech AI

Odpověď od AI

Strong-odkaz je běžný silný odkaz na objekt, který zvyšuje čítač odkazů (retain count) tohoto objektu. Dokud existuje alespoň jeden silný odkaz, objekt nebude odstraněn z paměti.

Weak-odkaz je slabý odkaz, který nezvyšuje čítač odkazů objektu. Používá se k prevenci cyklů držení (retain cycles). Pokud je objekt, na který odkazuje weak-odkaz, odstraněn, weak-odkaz se automaticky nastaví na nil.

Příklad v Swift:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    weak var tenant: Person?  // weak odkaz, aby se zabránilo cyklům
    init(unit: String) { self.unit = unit }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john  // weak-odkaz

Zde weak-odkaz tenant nedržení objekt Person, což umožňuje zabránit únikům paměti.