Sobes.tech
Junior

Барои чӣ истинодҳои заиф дар забони барномасозии Swift истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Референтҳои заиф (weak references) дар Swift барои пешгирии доираҳои ишораҳои қавӣ (strong reference cycles) истифода мешаванд, ки метавонанд ба дарзмолшавии хотира оварда расонанд. Дар системаи ҳисобкунии автоматии ишораҳо (ARC), объектҳо дар хотира нигоҳ дошта мешаванд, то он даме, ки ишораҳои қавӣ дошта бошанд. Агар ду объект ба ҳам ишораҳои қавӣ дошта бошанд, онҳо ҳеҷ гоҳ озод намешаванд.

Референти заиф ба ҳисобкунии ишораҳои объект таъсир намерасонад, бинобар ин, агар ишораҳои қавӣ набошанд, объект озод мешавад ва референси заиф автоматӣ nil мешавад. Ин махсусан дар кор бо делегатҳо, closures ва объектҳои мутақобил муфид аст.

Масалан истифодаи референси заиф:

class Person {
    var name: String
    weak var apartment: Apartment? // референси заиф
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    var tenant: Person? // референси қавӣ
    init(unit: String) {
        self.unit = unit
    }
}

var john: Person? = Person(name: "John")
var unit4A: Apartment? = Apartment(unit: "4A")

john?.apartment = unit4A
unit4A?.tenant = john

john = nil // объекти Person озод мешавад, зеро apartment референси заиф аст
unit4A = nil

Инчунин, референсҳои заиф кӯмак мекунанд, ки аз дарзмолшавии хотира бо қатъ кардани доираҳои ишораҳои қавӣ пешгирӣ шавад.