Sobes.tech
Junior — Middle

Můžete vysvětlit, co znamená pojem 'Unowned' v kontextu správy paměti?

sobes.tech AI

Odpověď od AI

V kontextu správy paměti v iOS (a Swift) znamená pojem "Unowned" slabou referenci na objekt, která nezvyšuje počet odkazů (retain count), ale předpokládá, že objekt existuje během používání této reference.

Rozdíly od weak:

  • weak reference může být nil, pokud je objekt odstraněn, a proto je deklarována jako volitelná.
  • unowned reference není volitelná a není automaticky nastavena na nil. Pokud je objekt, na který odkazuje unowned, odstraněn, pokus o přístup k němu způsobí chybu za běhu (crash).

Používá se, když je zaručeno, že životnost objektu, na který odkazují, je delší nebo rovná době života reference.

Příklad:

class Owner {
    var pet: Pet?
}

class Pet {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

let owner = Owner()
owner.pet = Pet(owner: owner)

Zde Pet drží unowned odkaz na Owner, předpokládá se, že Owner žije déle než Pet.