Junior — Middle
Tudná magyarázni, hogy mit értünk az 'Unowned' kifejezés alatt a memória kezelésének kontextusában?
sobes.tech MI
Válasz az MI-től
Az iOS (és Swift) memória kezelés kontextusában az "Unowned" kifejezés egy gyenge hivatkozást jelent egy objektumra, amely nem növeli a hivatkozásszámot (retain count), de feltételezi, hogy az objektum létezik a hivatkozás használata közben.
Különbségek a weak-hez képest:
- A
weakhivatkozásnil-vé válhat, ha az objektum törlésre kerül, ezért opcionálisként van deklarálva. - Az
unownedhivatkozás nem opcionális, és nem állítódik automatikusannil-re. Ha azunowned-ra hivatkozott objektum törlésre kerül, a hozzáférés futásidejű hibát (crash) eredményez.
Olyankor használják, amikor garantált, hogy a hivatkozott objektum élettartama hosszabb vagy egyenlő a hivatkozáséval.
Példa:
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)
Ebben az esetben a Pet tartalmaz egy unowned hivatkozást az Owner-re, feltételezve, hogy az Owner hosszabb ideig él, mint a Pet.