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.