Junior — Middle
Mi történik a tárggyal, ha csak egy nem erős (unowned) hivatkozás létezik rá, és az elérhetetlenné válik?
sobes.tech MI
Válasz az MI-től
Ha csak egy unowned (nem tulajdonolt) hivatkozás létezik egy objektumra, ez azt jelenti, hogy az objektumnak életben kell maradnia, amíg ez a hivatkozás létezik. Azonban, ha az objektum már deinitializálva (felszabadítva) van, és egy unowned hivatkozás próbál hozzáférni, az alkalmazás összeomlását okozza, mivel az unowned hivatkozások nem válnak automatikusan nil-lé és nem tartják fenn az objektumot.
Más szóval, az unowned hivatkozás feltételezi, hogy az objektum létezik, de nem tartja fenn. Ha az objektum elérhetetlenné válik (felszabadul), és az unowned hivatkozás megmarad, akkor a hozzáférés kísérlete futásidejű hibát eredményez.
Példa:
class Owner {
var child: Child?
}
class Child {
unowned let owner: Owner
init(owner: Owner) {
self.owner = owner
}
}
var owner: Owner? = Owner()
owner!.child = Child(owner: owner!)
owner = nil // Az Owner és a Child felszabadul
// Most az unowned hivatkozás child.owner egy felszabadult objektumra mutat — hozzáférése összeomlást okoz