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.