Sobes.tech
Junior — Middle

Kas notiks ar objektu, ja ir tikai viena vāja saite (nepiederīga) un tā kļūst nepieejama?

sobes.tech AI

Atbilde no AI

Ja ireks tikai viena unowned (neuzskatīta) atsauce uz objektu, tas nozīmē, ka objekts ir jābūt dzīvs, kamēr šī atsauce pastāv. Tomēr, ja objekts jau ir deinitializēts (atbrīvots), un unowned atsauce mēģina tam piekļūt, tas novedīs pie lietojumprogrammas avārijas, jo unowned atsauces automātiski ne kļūst par nil un neuztur objektu.

Citiem vārdiem sakot, unowned atsauce pieņem, ka objekts pastāv, bet to neuztur. Ja objekts kļūst nepieejams (tiek atbrīvots), un unowned atsauce paliek, piekļuve tai izraisīs izpildes kļūdu.

Piemērs:

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 // Īpašnieks un bērns tiek atbrīvoti
// Tagad, unowned atsauce child.owner norāda uz atbrīvotu objektu — piekļuve tam izraisīs avāriju