Junior — Middle
Môžu situácie súvisiace s používaním slabých (unowned) odkazov viesť k zlyhaniu aplikácie? Uveďte príklad.
sobes.tech AI
Odpoveď od AI
Áno, používanie slabých (unowned) odkazov v Swift môže viesť k zrúteniu aplikácie, ak už objekt, na ktorý odkazuje unowned odkaz, bol uvoľnený, a pokus o prístup k tejto referencii sa uskutoční neskôr.
Unowned odkazy predpokladajú, že objekt existuje vždy, keď je odkaz živý. Ak to tak nie je, aplikácia sa zrúti s chybou "EXC_BAD_ACCESS".
Prí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 uvoľnený
// Teraz apartment.tenant je unowned odkaz na už uvoľnený objekt
// Pokus o prístup k nemu spôsobí pád
print(john!.apartment!.tenant) // pád
Aby ste predišli takýmto pádom, musíte sa uistiť, že unowned odkaz nebude použitý po uvoľnení objektu, alebo použiť weak odkazy, ktoré sa stanú nil po uvoľnení objektu.