Sobes.tech
Junior — Middle

Môžete vysvetliť, čo znamená pojem 'Unowned' v kontexte správy pamäte?

sobes.tech AI

Odpoveď od AI

V kontexte správy pamäte v iOS (a Swift) znamená pojem "Unowned" slabú referenciu na objekt, ktorá nezvyšuje počet odkazov (retain count), ale predpokladá, že objekt existuje počas používania tejto referencie.

Rozdiely od weak:

  • weak referencie môžu byť nil, ak je objekt odstránený, a preto sú deklarované ako voliteľné.
  • unowned referencie nie sú voliteľné a nie sú automaticky nastavené na nil. Ak je objekt, na ktorý odkazuje unowned, odstránený, pokus o prístup k nemu spôsobí chybu počas behu (crash).

Používa sa, keď je garantované, že životnosť objektu, na ktorý odkazujú, je dlhšia alebo rovná životnosti referencie.

Prí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)

Tu Pet drží unowned odkaz na Owner, predpokladá sa, že Owner žije dlhšie ako Pet.