Junior — Middle
Môžete vysvetliť, čo znamená pojem 'Unowned' v kontexte správy pamäte?
sobes.tech AI
Odpoveď od AI
V kontexte správy pamäte v iOS (a Swift) znamená pojem "Unowned" slabú referenciu na objekt, ktorá nezvyšuje počet odkazov (retain count), ale predpokladá, že objekt existuje počas používania tejto referencie.
Rozdiely od weak:
weakreferencie môžu byťnil, ak je objekt odstránený, a preto sú deklarované ako voliteľné.unownedreferencie nie sú voliteľné a nie sú automaticky nastavené nanil. Ak je objekt, na ktorý odkazujeunowned, odstránený, pokus o prístup k nemu spôsobí chybu počas behu (crash).
Používa sa, keď je garantované, že životnosť objektu, na ktorý odkazujú, je dlhšia alebo rovná životnosti referencie.
Prí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)
Tu Pet drží unowned odkaz na Owner, predpokladá sa, že Owner žije dlhšie ako Pet.