Sobes.tech
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.