Sobes.tech
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 փակագծի միջև ուժեղ ցիկլը։