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