Junior — Middle
Mohou situace související s použitím slabých (unowned) odkazů vést k selhání aplikace? Uveďte příklad.
sobes.tech AI
Odpověď od AI
Ano, použití slabých (unowned) odkazů v Swiftu může vést k pádu aplikace, pokud již objekt, na který odkazuje unowned odkaz, byl uvolněn, a pokus o přístup k této referenci nastane později.
Unowned odkazy předpokládají, že objekt existuje vždy, dokud je odkaz živý. Pokud tomu tak není, aplikace spadne s chybou "EXC_BAD_ACCESS".
Příklad:
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 // objekt Person je uvolněn
// Nyní je apartment.tenant unowned odkaz na již uvolněný objekt
// Pokus o přístup k němu způsobí pád
print(john!.apartment!.tenant) // pád
Aby se předešlo takovým pádům, je třeba zajistit, že unowned odkaz nebude použit po uvolnění objektu, nebo použít weak odkazy, které se stanou nil po uvolnění objektu.