Sobes.tech
Junior — Middle

W jakich okolicznościach należy używać słabej referencji (weak) wewnątrz zamknięcia (closure)?

sobes.tech AI

Odpowiedź od AI

Słabe odwołania (weak) wewnątrz zamknięć w iOS są używane do zapobiegania cyklom silnych odwołań (retain cycles), które mogą prowadzić do wycieków pamięci. Zazwyczaj jest to istotne, gdy zamknięcie przechwytuje obiekt (np. self) i jest przez niego utrzymywane, tworząc wzajemny silny odwołanie.

Użyj weak, aby odwołać się do self wewnątrz zamknięcia, jeśli zamknięcie jest przechowywane jako właściwość obiektu lub może żyć dłużej niż wywołanie funkcji, aby uniknąć zatrzymywania obiektu w pamięci po jego zwolnieniu.

Przykład w Swift:

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

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

    func doSomething() {
        print("Wykonano akcję")
    }
}

Tutaj [weak self] zapobiega silnemu cyklowi między ViewController a zamknięciem completion.