Junior — Middle
Երբ պետք է օգտագործել թույլ (weak) հղում փակման (closure) ներսում։
sobes.tech AI
Պատասխան AI-ից
iOS-ի ներսում փակագծերի (closures) մեջ թույլ (weak) հղումները օգտագործվում են ուժեղ (strong) հղումային ցիկլեր (retain cycles) կանխելու համար, որոնք կարող են հանգեցնել հիշողության արտահոսքի: Սա սովորաբար կարևոր է, երբ փակագիծը բռնում է օբյեկտ (օրինակ, self) և պահվում է այդ օբյեկտի կողմից, ստեղծելով փոխադարձ ուժեղ հղում:
Օգտագործեք weak, որպեսզի հղում կատարեք self-ին փակագծի ներսում, եթե փակագիծը պահվում է օբյեկտի հատկության մեջ կամ կարող է ապրել ավելի երկար, քան ֆունկցիայի կանչը, որպեսզի խուսափեք օբյեկտի հիշողության մեջ պահպանումից այն հետո, երբ այն ազատվի:
Swift-ում օրինակ՝
class ViewController {
var completion: (() -> Void)?
func setup() {
completion = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Գործողությունը կատարվեց")
}
}
Այստեղ [weak self] կանխում է ViewController և completion փակագծի միջև ուժեղ ցիկլը։