Sobes.tech
Junior — Middle

Előfordulhat-e, hogy az alacsony (unowned) hivatkozások használatával kapcsolatos helyzetek az alkalmazás összeomlásához vezetnek? Adj példát.

sobes.tech MI

Válasz az MI-től

Igen, a Swiftben használt gyenge (unowned) referenciák alkalmazásának összeomlását okozhatják, ha a referenciával hivatkozott objektum már felszabadult, és később próbál hozzáférni ehhez a referenciához.

Az unowned referenciák feltételezik, hogy az objektum mindig létezik, amíg a referencia él. Ha ez nem így van, az alkalmazás "EXC_BAD_ACCESS" hibával összeomlik.

Példa:

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 // a Person objektum felszabadul

// Most az apartment.tenant egy unowned hivatkozás egy már felszabadult objektumra
// A hozzáférés hibát fog okozni
print(john!.apartment!.tenant) // crash

Az ilyen hibák elkerülése érdekében győződjön meg arról, hogy az unowned hivatkozás nem lesz használva az objektum felszabadítása után, vagy használjon weak hivatkozásokat, amelyek nil lesznek az objektum felszabadítása után.