Sobes.tech
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