Sobes.tech
Junior — Middle

Milyen helyzetekben kell az `unowned` kulcsszót használni Swift-ben?

sobes.tech MI

Válasz az MI-től

A Swiftben a unowned kulcsszó egy olyan gyenge hivatkozást jelent, amely nem opcionális, és nem növeli az objektum hivatkozásszámát.

Olyan helyzetekben használják, amikor ciklikus hivatkozás van az objektumok között, de garantált, hogy a hivatkozott objektum hosszabb ideig fog létezni, mint az unowned hivatkozás.

Például, a "szülő — gyermek" kapcsolatokban, ahol a gyermek unowned hivatkozást tart fenn a szülőre, hogy elkerüljék a ciklust:

class Parent {
    var child: Child?
}

class Child {
    unowned let parent: Parent
    init(parent: Parent) {
        self.parent = parent
    }
}

let dad = Parent()
let kid = Child(parent: dad)
dad.child = kid

Ha a unowned-ként hivatkozott objektum törlésre kerül, a hozzáférés kísérlete futási időben hibát eredményez. Ezért a unowned akkor megfelelő, ha az objektum életciklusa garantáltan hosszabb, mint a rá mutató hivatkozás.