Junior — Middle
Оё ҳолатҳои вобаста ба истифодаи ишораҳои заиф (unowned) метавонанд ба қатъ шудани барнома оварда расонанд? Як мисол диҳед.
sobes.tech AI
Ҷавоб аз AI
Бале, истифодаи ишораҳои заиф (unowned) дар Swift метавонад ба суст шудани барнома оварда расонад, агар объекте, ки ба он ишора мекунад unowned, аллакай озод карда шуда бошад ва кӯшиши дастрасӣ ба он баъдтар сурат гирад.
Ишораҳои unowned тахмин мезананд, ки объект ҳамеша вуҷуд дорад, то даме ки ишора зинда аст. Агар ин тавр набошад, барнома бо хати "EXC_BAD_ACCESS" суст мешавад.
Масалан:
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 // объект Person озод карда мешавад
// Акнун apartment.tenant ишораи unowned ба объекте, ки аллакай озод шудааст
// Дастрасӣ ба он боис мешавад ба сустшавӣ
print(john!.apartment!.tenant) // сустшавӣ
Барои пешгирӣ аз чунин сустшавиҳо, бояд боварӣ ҳосил кунед, ки ишораи unowned пас аз озод кардани объект истифода намешавад, ё истифодаи ишораҳои weak, ки пас аз озод кардани объект nil мешаванд.