Sobes.tech
Junior — Middle

Kas saaks anda näite, millal Swiftis sulgemises on vaja kasutada weak self, et vältida tsüklilisi viiteid?

sobes.tech AI

Vastus AI-lt

Swiftis tekib tsükliline viide, kui objekt haarab end ise sulgemise kaudu, ja see sulgemine salvestatakse samasse objekti, mis viib vastastikuse hoidmise ja mälulekke tekkimiseni. Selle vältimiseks kasutatakse weak self.

Näide: teil on klass ViewController, mis alustab asünkroonset operatsiooni sulgemisega. Kui sulgemises kasutatakse otse self, siis ViewController hoitakse kinni sulgemise poolt ja see ei vabastata pärast sulgemist.

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) {
        // kasutajaliidese uuendamine
    }
}

Siin takistab weak self tugeva tsüklilise viite tekkimist, kuna sulgemine haarab self nõrgalt ja ei hoia objekti kinni, võimaldades selle vabastamist.