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