Sobes.tech
Junior — Middle

Фарқи истифодаи калимаҳои калидии '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 эълон шудааст, зеро хона бояд шахсро бо истиноди қавӣ нигоҳ надорад, то давр пешгирӣ шавад, аммо тахмин мезанад, ки шахс дарозтар аз хона вуҷуд дорад.