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.