Junior — Middle
შეგიძლიათ მიაწოდოთ მაგალითი, როდესაც Swift-ის დახურვაში weak self-ის გამოყენება საჭიროა ციკლური მითითებების თავიდან ასაცილებლად?
sobes.tech AI
პასუხი AI-სგან
Swift-ში ციკლური მითითება ხდება, როდესაც ობიექტი იჭერს თავის თავს დახურვაში, და ეს დახურვა ინახება იმავე ობიექტში, რაც იწვევს gegenseitige შენარჩუნებას და მეხსიერების გაჟონვას. ამის თავიდან ასაცილებლად გამოიყენება 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-ს და არ ინარჩუნებს ობიექტს, რაც საშუალებას აძლევს მას გათავისუფლდეს.