Junior — Middle
Ի՞նչ է առաջացնում հիշողության արտահոսքերը ծրագրերում։
sobes.tech AI
Պատասխան AI-ից
Ծախսերը ծրագրերում առաջանում են, երբ օբյեկտների կամ տվյալների համար հատկացված հիշողությունը չի ազատվում այն ժամանակ, երբ այն արդեն անհրաժեշտ չէ։ iOS-ում դա հաճախ կապված է.
- Օբյեկտների միջև ռեֆերենցիաների ցիկլերի (պահպանման ցիկլեր), հատկապես ARC (Ավտոմատ Ռեֆերենցիայի Հաշվարկ) օգտագործելիս։ Օրինակ, երբ երկու օբյեկտներ միմյանց հետ հղում են անում ուժեղ ռեֆերենցիաներով, նրանք չեն ազատվում։
- Ճշմարտացի չօգտագործում փակագծեր (closures), որոնք բռնում են self-ին ուժեղ ռեֆերենցիայով։
- Աշխատանքային ռեսուրսների, ինչպիսիք են ժամացույցները, դիտորդները կամ ֆայլերի նկարագրիչները, չազատել։
Օրինակ՝ պահպանում ցիկլի փակագծով:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // self-ը ուժեղ կերպով բռնվում է, ստեղծելով ցիկլ
}
}
}
Անցանկալի արտահոսքներից խուսափելու համար, օգտագործվում են թույլ (weak) կամ անպատասխան (unowned) ռեֆերենցիաներ փակագծերում և ապահովվում է օբյեկտների կյանքի ցիկլի ճիշտ կառավարում։