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) հղումներ, որոնք չեն ավելացնում հղումների հաշվիչը և թույլ են տալիս ճիշտ ազատել օբյեկտները։