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.