Sobes.tech
Junior — Middle

Milyen okok miatt kevésbé előnyös az Unowned használata bizonyos helyzetekben?

sobes.tech MI

Válasz az MI-től

Az iOS (Swift) unowned használata kevésbé ajánlott olyan helyzetekben, amikor fennáll annak a kockázata, hogy az unowned-dal hivatkozott objektum korábban kerülhet felszabadításra (deallocated), mint a hivatkozás használata. Ellentétben a weak-kel, az unowned nem opcionális és nem válik nil-lé a felszabadításkor, ezért ilyen hivatkozás elérése a felszabadítás után futási hiba (runtime error) okoz.

Az unowned elkerülésének okai:

  • Ha az objektum életciklusa nem garantálja, hogy a hivatkozás mindig érvényes lesz.
  • Bonyolult kölcsönös hivatkozások esetén, ahol a felszabadítás sorrendje nem egyértelmű.

Ilyen esetekben jobb a weak használata, amely automatikusan nil lesz, így elkerülve a váratlan összeomlást.

Példa:

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

class B {
    var a: A?
}

Ha a B objektumot A előtt szabadítják fel, az A-ban a b-hez való hozzáférés hibát okoz.