Junior — Middle
Čo sa stane s objektom, ak na neho existuje iba jedna nezávislá (unowned) referencia a stane sa nedostupná?
sobes.tech AI
Odpoveď od AI
Ak existuje iba jedna slabá referencia (unowned) k objektu, to znamená, že objekt musí byť živý, pokiaľ táto referencia existuje. Avšak, ak je objekt už deinitializovaný (uvoľnený), a unowned referencia sa pokúsi naň odkazovať, spôsobí to pád aplikácie, pretože unowned referencie sa automaticky nenastavujú na nil a neudržujú objekt.
Inými slovami, unowned referencia predpokladá, že objekt existuje, ale ho neudržuje. Ak sa objekt stane nedostupným (uvoľní sa), a unowned referencia zostane, pokus o jej prístup spôsobí chybu počas behu.
Príklad:
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 // Owner a Child sú uvoľnené
// Teraz unowned referencia child.owner ukazuje na uvoľnený objekt — prístup k nej spôsobí pád