Sobes.tech
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.