Sobes.tech
Junior — Middle

Тафовут байни ишораҳои Weak ва Unowned дар идоракунии хотира чист?

sobes.tech AI

Ҷавоб аз AI

Дар Swift, ишораҳои навъи weak ва unowned барои пешгирӣ аз гирдоби ишораҳои қавӣ (retain cycles) дар идоракунии хотира истифода мешаванд, аммо дар рафтор ва истифода фарқ мекунанд.

  • Weak (ишораи заиф):

    • Мумкин аст, ки nil бошад.
    • Ба сифати навъи интихобшаванда (опционалӣ) эълон мешавад (var delegate: SomeDelegate? weak).
    • Вақте ки ишора метавонад дар тӯли ҳаёти объект nil шавад, масалан, дар делегатҳо, истифода мешавад.
    • Система автоматӣ ишораи weak-ро ба nil мегузорад, вақте ки объекте, ки ба он ишора мекунад, озод мешавад.
  • Unowned (бе соҳиб):

    • Наметавонад nil бошад (навоҳиди наопционалӣ).
    • Вақте истифода мешавад, ки ишора дар тӯли ҳаёти объект кафолат дода шудааст, масалан, байни падар ва кӯдак.
    • Агар объекте, ки ба он ишора мекунад, аллакай озод шуда бошад, кӯшиши дастрасӣ ба он хатогӣ дар вақти иҷро (crash) ба вуҷуд меорад.

Масал:

class Person {
    var apartment: Apartment?
}

class Apartment {
    unowned let tenant: Person
    init(tenant: Person) {
        self.tenant = tenant
    }
}

// Ин ҷо, tenant unowned аст, зеро хона наметавонад бе иҷорагир вуҷуд дошта бошад.

class DelegateHolder {
    weak var delegate: SomeDelegate?
}

// Дилегат weak аст, зеро мумкин аст, ки пеш аз вақт озод шавад.

Аз ин рӯ, weak барои ишораҳое мувофиқ аст, ки метавонанд nil гарданд, ва unowned барои ишораҳое, ки бояд ҳамеша дар тӯли ҳаёти объект дуруст бошанд.