Sobes.tech
Junior — Middle

Կարող եք տալ օրինակ, երբ Swift-ի փակման մեջ անհրաժեշտ է օգտագործել weak self՝ ցիկլային հղումներից խուսափելու համար։

sobes.tech AI

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

Swift-ում ցիկլային հղում առաջանում է, երբ օբյեկտը բռնում է ինքն իրեն փակման մեջ, և այդ փակումը պահվում է նույն օբյեկտում, ինչը հանգեցնում է փոխադարձ պահպանում և հիշողության լքման: Դրա կանխարգելման համար օգտագործվում է weak self:

Օրինակ՝ դուք ունեք ViewController դաս, որը սկսում է ասինխրոն գործողություն փակման հետ: Եթե փակման մեջ ուղղակի օգտագործեք self, ապա ViewController-ը պահվում է փակման կողմից և չի ազատվում փակվելուց հետո:

class ViewController: UIViewController {
    func fetchData() {
        networkRequest { [weak self] data in
            guard let self = self else { return }
            self.updateUI(with: data)
        }
    }

    func updateUI(with data: Data) {
        // ինտերֆեյսի թարմացում
    }
}

Այստեղ weak self կանխում է ուժեղ ցիկլային հղումը, քանի որ փակումը թույլ է տալիս self-ին թույլ և չի պահում օբյեկտը, ինչը հնարավորություն է տալիս այն ազատ արձակել։