Sobes.tech
Junior — Middle

Kokios priežastys daro Unowned naudojimą mažiau pageidautinu tam tikrose situacijose?

sobes.tech AI

Atsakymas iš AI

iOS (Swift) naudoti unowned yra mažiau pageidautina situacijose, kai yra rizika, kad unowned nuoroda gali būti anksčiau išlaisvinta (deallocated) nei bus naudojama nuoroda. Skirtingai nuo weak, unowned nėra pasirinktinė ir nesikeičia į nil, kai objektas yra išlaisvinamas, todėl prieiga prie tokios nuorodos po išlaisvinimo sukels programos avariją (runtime error).

Priežastys vengti unowned:

  • Jei objekto gyvavimo ciklas negarantuoja, kad nuoroda visada bus galiojanti.
  • Sudėtingų tarpusavio nuorodų atvejais, kur nėra aišku objekto išlaisvinimo tvarka.

Tokiu atveju geriau naudoti weak, kuris automatiškai tampa nil, išvengiant netikėtų programos žlugimų.

Pavyzdys:

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

class B {
    var a: A?
}

Jei B objektas bus išlaisvintas anksčiau nei A, prieiga prie b A viduje sukels klaidą.