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.