Sobes.tech
Junior — Middle

Ինչպե՞ս է տեղի ունենում հիշողության ազատում ցիկլային հղումներով օբյեկտների համար կառավարվող միջավայրերում։

sobes.tech AI

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

Կառավարվող միջավայրերում, ինչպիսիք են iOS- ի ARC (Ավտոմատ Հղումի Հաշվարկը), օբյեկտների ցիկլային հղումների համար հիշողության ազատումը տեղի չի ունենում ավտոմատ, քանի որ ARC- ն չի կարող կոտրել հղումների ցիկլերը:

Այս խնդրի լուծման համար օգտագործվում են թույլ (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
    }
}

Այստեղ, Person և Apartment հղում են միմյանց, բայց մեկը թույլ է, ինչը կանխում է հիշողության լճացումը:

Եթե հղումների ցիկլերը չկտրվեն, օբյեկտները կմնան հիշողության մեջ, չնայած արտաքին հղումներին, ինչը կհանգեցնի հիշողության լճացման: