Sobes.tech
Junior — Middle

Можете ли објаснити шта значи коришћење слабог референце на self у затварачу?

sobes.tech АИ

Одговор од АИ

Korišćenje slabe reference (weak reference) na self u zatvaranjima u iOS (Swift) pomaže da se izbegnu ciklusi zadržavanja (retain cycles), koji dovode do curenja memorije. Kada zatvaranje uhvati self kao snažnu referencu, a self sadrži to zatvaranje, oni se međusobno drže, i memorija se ne oslobađa.

Primer:

class MyClass {
    var closure: (() -> Void)?

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

    func doSomething() {
        print("Action")
    }
}

Ovde [weak self] znači da će self unutar zatvaranja biti slaba referenca, i ako objekat bude uništen, referenca će postati nil, čime se sprečava curenje memorije.