Junior — Middle
Dlaczego w kodzie z użyciem zamknięć zaleca się używanie słabej referencji do samego obiektu (weak self)?
sobes.tech AI
Odpowiedź od AI
Użycie słabej referencji (weak self) w zamknięciach jest konieczne, aby zapobiec cyklom silnych referencji (retention cycles), które prowadzą do wycieków pamięci.
Gdy zamknięcie przechwytuje self jako silną referencję, a self zawiera to zamknięcie (np. w właściwości), wzajemnie się utrzymują, i żaden z obiektów nie jest zwalniany.
Przykład użycia słabej referencji:
someAsyncCall { [weak self] in
guard let self = self else { return }
self.doSomething()
}
Tutaj self jest przechwytywane słabo, więc jeśli obiekt self zostanie zniszczony przed wykonaniem zamknięcia, to zamknięcie nie będzie go trzymać w pamięci, co zapobiega wyciekowi.