Sobes.tech
Junior — Middle

Могу ли ситуације везане за коришћење слабих (unowned) референци довести до пада апликације? Наведите пример.

sobes.tech АИ

Одговор од АИ

Da, korišćenje slabih (unowned) referenci u Swift-u može dovesti do pada aplikacije ako je objekat na koji se odnosi unowned referenca već oslobođen, a pokušaj pristupa toj referenci se desi kasnije.

Unowned reference pretpostavljaju da objekat uvek postoji dok je referenca živa. Ako to nije slučaj, aplikacija će se srušiti sa greškom "EXC_BAD_ACCESS".

Primer:

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 // objekat Person se oslobađa

// Sada apartment.tenant je unowned referenca na već oslobođen objekat
// Pokušaj pristupa će dovesti do pada
print(john!.apartment!.tenant) // pad

Da biste izbegli takve padove, morate biti sigurni da unowned referenca neće biti korišćena nakon oslobađanja objekta, ili koristiti weak reference koje postaju nil nakon oslobađanja objekta.