Junior — Middle
Můžete vysvětlit, co znamená pojem 'Unowned' v kontextu správy paměti?
sobes.tech AI
Odpověď od AI
V kontextu správy paměti v iOS (a Swift) znamená pojem "Unowned" slabou referenci na objekt, která nezvyšuje počet odkazů (retain count), ale předpokládá, že objekt existuje během používání této reference.
Rozdíly od weak:
weakreference může býtnil, pokud je objekt odstraněn, a proto je deklarována jako volitelná.unownedreference není volitelná a není automaticky nastavena nanil. Pokud je objekt, na který odkazujeunowned, odstraněn, pokus o přístup k němu způsobí chybu za běhu (crash).
Používá se, když je zaručeno, že životnost objektu, na který odkazují, je delší nebo rovná době života reference.
Příklad:
class Owner {
var pet: Pet?
}
class Pet {
unowned let owner: Owner
init(owner: Owner) {
self.owner = owner
}
}
let owner = Owner()
owner.pet = Pet(owner: owner)
Zde Pet drží unowned odkaz na Owner, předpokládá se, že Owner žije déle než Pet.