Sobes.tech
Junior — Middle

Kādas ir iemesli, kāpēc Unowned lietošana dažās situācijās ir mazāk vēlams?

sobes.tech AI

Atbilde no AI

iOS (Swift) lietošanas gadījumā unowned ir mazāk ieteicams situācijās, kad pastāv risks, ka unowned saistītais objekts var tikt atbrīvots (deallocated) pirms atsauce tiek izmantota. Atšķirībā no weak, unowned nav opcionals un nesāk kļūt par nil objekta atbrīvošanas laikā, tāpēc piekļuve šādai atsaucei pēc atbrīvošanas novedīs pie programmas avārijas (runtime error).

Iemesli izvairīties no unowned:

  • Ja objekta dzīves cikls negarantē, ka atsauce vienmēr būs derīga.
  • Sarežģītu savstarpēju atsauču gadījumos, kur objekta atbrīvošanas secība nav skaidra.

Šādos gadījumos ir labāk izmantot weak, kas automātiski kļūst par nil, novēršot negaidītas avārijas.

Piemērs:

class A {
    unowned var b: B
    init(b: B) { self.b = b }
}

class B {
    var a: A?
}

Ja B objekts tiek atbrīvots pirms A, piekļuve b A iekšienē radīs kļūdu.