Sobes.tech
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-ს და არ ინარჩუნებს ობიექტს, რაც საშუალებას აძლევს მას გათავისუფლდეს.