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-ին թույլ և չի պահում օբյեկտը, ինչը հնարավորություն է տալիս այն ազատ արձակել։