Sobes.tech
Junior — Middle

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

sobes.tech AI

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

Ծախսերը ծրագրերում առաջանում են, երբ օբյեկտների կամ տվյալների համար հատկացված հիշողությունը չի ազատվում այն ​​ժամանակ, երբ այն արդեն անհրաժեշտ չէ։ iOS-ում դա հաճախ կապված է.

  • Օբյեկտների միջև ռեֆերենցիաների ցիկլերի (պահպանման ցիկլեր), հատկապես ARC (Ավտոմատ Ռեֆերենցիայի Հաշվարկ) օգտագործելիս։ Օրինակ, երբ երկու օբյեկտներ միմյանց հետ հղում են անում ուժեղ ռեֆերենցիաներով, նրանք չեն ազատվում։
  • Ճշմարտացի չօգտագործում փակագծեր (closures), որոնք բռնում են self-ին ուժեղ ռեֆերենցիայով։
  • Աշխատանքային ռեսուրսների, ինչպիսիք են ժամացույցները, դիտորդները կամ ֆայլերի նկարագրիչները, չազատել։

Օրինակ՝ պահպանում ցիկլի փակագծով:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // self-ը ուժեղ կերպով բռնվում է, ստեղծելով ցիկլ
        }
    }
}

Անցանկալի արտահոսքներից խուսափելու համար, օգտագործվում են թույլ (weak) կամ անպատասխան (unowned) ռեֆերենցիաներ փակագծերում և ապահովվում է օբյեկտների կյանքի ցիկլի ճիշտ կառավարում։