Sobes.tech
Junior — Middle

Milline on erinevus 'unowned' ja 'strong' võtmesõnade kasutamisel viidete deklareerimisel Swiftis?

sobes.tech AI

Vastus AI-lt

Swiftis kasutatakse võtmesõnu strong ja unowned viidete haldamiseks ning hoidmisringide (retain cycles) vältimiseks.

  • strong — see on standardne tugev viide, mis suurendab objekti viidete loendurit. Kuni on vähemalt üks tugev viide, objekt ei eemaldata mälust.

  • unowned — see on nõrk, kuid mitte-valikuline viide. See ei suurenda viidete loendurit, kuid eeldab, et viidatud objekt eksisteerib alati selle viite kasutamise ajal. Kui objekt on juba eemaldatud, põhjustab unowned viite kasutamine jooksva ajal vea.

Näide:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt

Siin on tenant deklareeritud kui unowned, kuna korter ei tohiks hoida inimest tugevate viidetega, et vältida tsüklit, kuid eeldatakse, et inimene eksisteerib kauem kui korter.