Sobes.tech
Junior — Middle

Za akých okolností by ste mali použiť slabú (weak) referenciu vo vnútri uzáveru (closure)?

sobes.tech AI

Odpoveď od AI

Slabé odkazy (weak) vo vnútri uzáverov v iOS sa používajú na prevenciu cyklov silných odkazov (retain cycles), ktoré môžu viesť k únikom pamäti. To je zvyčajne relevantné, keď uzáver zachytí objekt (napríklad, self) a je týmto objektom udržiavaný, čím vzniká vzájomný silný odkaz.

Použite weak na odkazovanie na self vo vnútri uzáveru, ak je uzáver uložený ako vlastnosť objektu alebo môže žiť dlhšie ako volanie funkcie, aby ste predišli udržiavaniu objektu v pamäti po jeho uvoľnení.

Príklad v Swift:

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

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

    func doSomething() {
        print("Akcia vykonaná")
    }
}

Tu [weak self] zabraňuje silnému cyklu medzi ViewController a uzáverom completion.