Sobes.tech
Junior — Middle

Zašto se preporučuje korišćenje slabe reference na sebe (weak self) u kodu koji koristi zatvarače?

sobes.tech АИ

Одговор од АИ

Korišćenje slabe reference (weak self) u zatvaranjima je neophodno za sprečavanje ciklusa jakih referenci (retain cycles), koji dovode do curenja memorije.

Kada zatvaranje uhvati self kao slabu referencu, a self sadrži to zatvaranje (npr. u svojstvu), oni se drže međusobno, i nijedan od objekata se ne oslobađa.

Primer korišćenja slabe reference:

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

Ovde je self uhvaćen slabo, tako da ako objekat self bude uništen pre izvršenja zatvaranja, ono ga neće držati u memoriji, čime se sprečava curenje.