Sobes.tech
Junior — Middle

Czy możesz wyjaśnić, co oznacza użycie słabej referencji do self w zamknięciach?

sobes.tech AI

Odpowiedź od AI

Użycie słabej referencji (weak reference) do self w zamknięciach w iOS (Swift) pomaga uniknąć cykli zatrzymania (retain cycles), które prowadzą do wycieków pamięci. Gdy zamknięcie przechwytuje self jako silną referencję, a self zawiera to zamknięcie, obie te referencje utrzymują się nawzajem, a pamięć nie jest zwalniana.

Przykład:

class MyClass {
    var closure: (() -> Void)?

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

    func doSomething() {
        print("Action")
    }
}

Tutaj [weak self] oznacza, że wewnątrz zamknięcia self będzie słabą referencją, a jeśli obiekt zostanie zniszczony, referencja stanie się nil, zapobiegając wyciekowi pamięci.