Sobes.tech
Junior — Middle

U kojim okolnostima treba koristiti slabu (weak) referencu unutar zatvaranja (closure)?

sobes.tech АИ

Одговор од АИ

Slabe reference (weak) unutar zatvaranja u iOS se koriste za sprečavanje cikličnih jakih referenci (retain cycles), koje mogu dovesti do curenja memorije. Ovo je obično važno kada zatvaranje uhvati objekat (npr. self) i bude zadržano od strane tog objekta, stvarajući međusobnu jaku referencu.

Koristite weak za referencu na self unutar zatvaranja ako se zatvaranje čuva kao svojstvo objekta ili može živeti duže od poziva funkcije, kako biste izbegli zadržavanje objekta u memoriji nakon što bude oslobođen.

Primer u Swift-u:

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

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

    func doSomething() {
        print("Akcija izvršena")
    }
}

Ovde [weak self] sprečava jak ciklus između ViewController i zatvaranja completion.