Sobes.tech
Junior — Middle

Millistel juhtudel tuleks kasutada nõrka (weak) viidet sulgemise (closure) sees?

sobes.tech AI

Vastus AI-lt

Nõrgad viited (weak) iOS-i sulgudes (closures) sees kasutatakse selleks, et vältida tugevate viidete tsükleid (retain cycles), mis võivad põhjustada mälu lekked. See on tavaliselt oluline siis, kui sulg haarab objekti (näiteks self) ja hoitakse selle objekti poolt, luues vastastikuse tugeva viite.

Kasuta weak, et viidata self-ile sulgus sees, kui sulg salvestatakse objekti omadusena või võib elada kauem kui funktsiooni kutsumine, et vältida objekti hoidmist mälus pärast selle vabastamist.

Swift näide:

class ViewController {
    var completion: (() -> Void)?

    func setup() {
        completion = { [weak self] in
            guard let self = self else { return }
            self.doSomething()
        }
    }

    func doSomething() {
        print("Tegevus teostatud")
    }
}

Siin [weak self] takistab tugeva tsükli tekkimist ViewController ja completion sulgu vahel.