Фарқи истифодаи калимаҳои калидии 'unowned' ва 'strong' дар эълони истинодҳо дар Swift чист?
sobes.tech AI
Ҷавоб аз AI
Дар Swift калидвожаҳои strong ва unowned барои идора кардани истинодҳо ва пешгирӣ аз даврҳои нигоҳдорӣ (retain cycles) истифода мешаванд.
-
strong — ин як истиноди қавӣ стандартӣ аст, ки ҳисобкунаки истинодҳоро ба объект меафзояд. То он даме ки ҳадди ақал як истиноди қавӣ вуҷуд дорад, объект аз ёдраскуни хориҷ намешавад.
-
unowned — ин як истиноди заиф, аммо наопционалӣ аст. Он ҳисобкунаки истинодҳоро зиёд намекунад, аммо тахмин мезанад, ки объекте, ки ба он ишора мекунад, ҳамеша дар вақти истифодаи ин истинод вуҷуд дорад. Агар объект аллакай хориҷ карда шуда бошад, дастрасӣ ба истиноди
unownedдар вақти иҷро хато меорад.
Масалан:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Ин ҷо, tenant ҳамчун unowned эълон шудааст, зеро хона бояд шахсро бо истиноди қавӣ нигоҳ надорад, то давр пешгирӣ шавад, аммо тахмин мезанад, ки шахс дарозтар аз хона вуҷуд дорад.