Sobes.tech
Junior — Middle

Kas saaksite selgitada, mida tähendab termin 'Unowned' mälu haldamise kontekstis?

sobes.tech AI

Vastus AI-lt

Konteksts, kus hallatakse mälu iOS-is (ja Swiftis), tähendab "Unowned" nõrk viide objekti, mis ei suurenda viidete arvu (retain count), kuid eeldab, et objekt eksisteerib selle viite kasutamise ajal.

Erinevused weak-ist:

  • weak viide võib muutuda nil, kui objekt kustutatakse, ning seetõttu on see deklareeritud valikuna.
  • unowned viide ei ole valikuline ja ei muutu automaatselt nil-ks. Kui viidatud objekt kustutatakse, põhjustab sellele juurdepääs jooksuaegse vea (crash).

Kasutatakse siis, kui on garanteeritud, et viidatud objekti eluiga on pikem või võrdne viite elueaga.

Näide:

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)

Siin hoiab Pet unowned viidet Owner-le, eeldades, et Owner elab kauem kui Pet.