Sobes.tech
Junior — Middle

Ի՞նչ տարբերություն կա Strong և Weak հղումների տեսակների միջև հիշողության կառավարման և հղման մոդելում։

sobes.tech AI

Պատասխան AI-ից

Strong-հղում — դա նորմալ ուժեղ հղում է օբյեկտին, որը մեծացնում է այդ օբյեկտի հղումների հաշվիչը (retain count): Երբ առնվազն մեկ ուժեղ հղում կա, օբյեկտը չի հեռացվի հիշողությունից:

Weak-հղում — դա թույլ հղում է, որը չի մեծացնում օբյեկտի հղումների հաշվիչը: Այն օգտագործվում է ռետինգային շրջանների (retain cycles) կանխարգելման համար: Եթե այն օբյեկտը, որի վրա ցույց է տալիս թույլ հղումը, հեռացվի, ապա այն ավտոմատ կերպով կդառնա nil:

Օրինակ Swift-ում:

class Person {
    var name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let unit: String
    weak var tenant: Person?  // թույլ հղում՝ շրջանները կանխելու համար
    init(unit: String) { self.unit = unit }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john  // թույլ հղում

Այստեղ, թույլ հղում tenant չի պահում Person օբյեկտը, ինչը թույլ է տալիս խուսափել հիշողության լիկվիդից։