Sobes.tech
Junior — Middle

Kas võib olukord, mis on seotud nõrkade (unowned) viidete kasutamisega, põhjustada rakenduse krahhi? Tooge näide.

sobes.tech AI

Vastus AI-lt

Jah, Swiftis kasutatavate nõrkade (unowned) viidete kasutamine võib põhjustada rakenduse kokkuvarisemise, kui unowned viidatud objekt on juba vabastatud ja sellele viidetele hiljem püüda ligi pääseda.

Unowned viited eeldavad, et objekt eksisteerib alati, kuni viide on elus. Kui see nii ei ole, kukub rakendus kokku veaga "EXC_BAD_ACCESS".

Näide:

class Person {
    var apartment: Apartment?
}

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

var john: Person? = Person()
john!.apartment = Apartment(tenant: john!)

john = nil // Person objekt vabastatakse

// Nüüd on apartment.tenant unowned viide juba vabastatud objekti
// Sellele juurdepääs põhjustab kokkuvarisemise
print(john!.apartment!.tenant) // kokkuvarisemine

Selliste kokkuvarisemiste vältimiseks tuleb veenduda, et unowned viidet ei kasutata pärast objekti vabastamist või kasutada weak viiteid, mis muutuvad pärast objekti vabastamist nil-iks.