Sobes.tech
Junior — Middle

Za jakých okolností byste měli použít slabý odkaz (weak) uvnitř uzávěru (closure)?

sobes.tech AI

Odpověď od AI

Slabé odkazy (weak) uvnitř uzávěrů v iOS se používají k prevenci cyklů silných odkazů (retain cycles), které mohou vést k únikům paměti. To je obvykle relevantní, když uzávěr zachytí objekt (například self) a je tímto objektem udržován, čímž vzniká vzájemný silný odkaz.

Použijte weak k odkazu na self uvnitř uzávěru, pokud je uzávěr uložen jako vlastnost objektu nebo může žít déle než volání funkce, aby se zabránilo udržování objektu v paměti po jeho uvolnění.

Pří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("Akce provedena")
    }
}

Zde [weak self] zabraňuje silnému cyklu mezi ViewController a uzávěrem completion.