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.