Sobes.tech
Junior

Модификатори ёддоштии weak дар Swift чӣ аст?

sobes.tech AI

Ҷавоб аз AI

Модификатори weak истифода мешавад барои шикастани циклҳои истинодҳои қавӣ байни объектҳо, вақте ки як объект дорои истиноди қавӣ ба дигар аст ва он дар навбати худ истиноди қавӣ ба объекти аввал дорад.

Хусусиятҳои асосии weak:

  • Меъёри ҳисобкунии истинодҳоро намеафзояд: Истифодаи weak шумораи истинодҳои қавиро ба объект зиёд намекунад.
  • Мумкин аст nil бошад: Истиноди заиф (Optional) аст ва автоматӣ nil мешавад, вақте ки объекте, ки ба он ишора мекунад, деинициализатсия мешавад.
  • Барои муносибатҳои падар/чаҳор истифода мешавад: Аксар вақт истифода мешавад, вақте ки объектчаи кӯдак истинод ба падараш дорад, то аз циклҳои истинодҳои қавӣ пешгирӣ кунад.
  • Муҳим аст, ки ҳамчун var эълон шавад: Зеро истиноди заиф метавонад nil шавад, бояд ҳамчун тағирёбанда (var) эълон карда шавад, на ҳамчун константа (let).

Маслиҳат барои истифода:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
        print("\(name) оғоз мешавад")
    }

    deinit {
        print("\(name) ба охир мерасад")
    }
}

class Apartment {
    let unit: String
    weak var tenant: Person? // Истиноди заиф

    init(unit: String) {
        self.unit = unit
        print("Ҳуҷра \(unit) оғоз мешавад")
    }

    deinit {
        print("Ҳуҷра \(unit) ба охир мерасад")
    }
}

Бе weak var tenant: Person? дар синфи Apartment, цикли истинодҳои қавӣ ба вуҷуд меояд, ва намунаҳои Person ва Apartment вақте ки дигар истинодҳои қавӣ ба онҳо вуҷуд надошта бошад, деинициализатсия намеёбанд. Бо кӯмак аз weak, вақте ки намунаи Person деинициализатсия мешавад, истиноди tenant дар намунаи Apartment автоматӣ nil мешавад.