Sobes.tech
Junior

Ի՞նչ է հիշողության արտահոսքը և ինչպես է այն առաջանում։

sobes.tech AI

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

Հիշողության արտահոսքը այն իրավիճակն է, երբ ծրագիրը հատկացնում է հիշողություն օբյեկտների համար, բայց այնուհետև, երբ նրանք այլևս անհրաժեշտ չեն, նրանց վրա հղումները չեն հեռացվում, և մաքրման համակարգը չի կարող ազատել այդ հիշողությունը։ iOS-ում, որտեղ օգտագործվում է ARC (Ավտոմատ Հղումային Հաշվարկ), հիշողության արտահոսքերը հաճախ առաջանում են ցիկլային հղումներից, օրինակ՝ երբ երկու օբյեկտներ միմյանց հղում են կատարում ուժեղ հղումներով, և ոչ մեկը չի ազատվում։

Swift-ում ցիկլային հղման օրինակ՝

class A {
    var b: B?
}

class B {
    var a: A?
}

let a = A()
let b = B()

a.b = b
b.a = a
// Երկու օբյեկտներն էլ միմյանց հղում են կատարում, ARC-ն չի կարող ինքնաբերաբար ազատել նրանց

Անց tránhելու համար արտահոսքերը, օգտագործվում են թույլ (weak) կամ առանց սեփականության (unowned) հղումներ, որոնք չեն ավելացնում հղումների հաշվիչը և թույլ են տալիս ճիշտ ազատել օբյեկտները։