Sobes.tech
Junior — Middle

Ինչպե՞ս է ազատվում հիշողությունը, որը զբաղեցնում է օբյեկտը ծրագրում։

sobes.tech AI

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

iOS-ում հիշողության ազատումը հիմնականում ավտոմատ կերպով տեղի է ունենում ARC (Automatic Reference Counting) համակարգի շնորհիվ: Յուրաքանչյուր օբյեկտ ունի հղման հաշվիչ, որը մեծանում է նոր ուժեղ հղում ստեղծելիս և նվազում է այն հեռացնելիս: Երբ հաշվիչը հասնում է զրոյի, օբյեկտը ավտոմատ կերպով ոչնչացվում է և հիշողությունը ազատվում:

Եթե կոդում առաջանան ցիկլային հղումներ (օրինակ, երկու օբյեկտներ ուժեղ հղումներով միմյանց), հիշողությունը չի ազատվում: Այս խնդիրը լուծելու համար օգտագործվում են թույլ (weak) կամ առանց սեփականության (unowned) հղումներ:

Օրինակ՝

class Person {
    var name: String
    weak var apartment: Apartment? // թույլ հղում ցիկլից խուսափելու համար
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // առանց սեփականության հղում
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Այսպիսով, հիշողության ազատումը տեղի է ունենում ավտոմատ, եթե հղումները ճիշտ կառավարվում են։