Sobes.tech
Junior — Middle

Tudná magyarázni, hogy mit értünk az 'Unowned' kifejezés alatt a memória kezelésének kontextusában?

sobes.tech MI

Válasz az MI-től

Az iOS (és Swift) memória kezelés kontextusában az "Unowned" kifejezés egy gyenge hivatkozást jelent egy objektumra, amely nem növeli a hivatkozásszámot (retain count), de feltételezi, hogy az objektum létezik a hivatkozás használata közben.

Különbségek a weak-hez képest:

  • A weak hivatkozás nil-vé válhat, ha az objektum törlésre kerül, ezért opcionálisként van deklarálva.
  • Az unowned hivatkozás nem opcionális, és nem állítódik automatikusan nil-re. Ha az unowned-ra hivatkozott objektum törlésre kerül, a hozzáférés futásidejű hibát (crash) eredményez.

Olyankor használják, amikor garantált, hogy a hivatkozott objektum élettartama hosszabb vagy egyenlő a hivatkozáséval.

Példa:

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)

Ebben az esetben a Pet tartalmaz egy unowned hivatkozást az Owner-re, feltételezve, hogy az Owner hosszabb ideig él, mint a Pet.