Junior — Middle
Miért ajánlott gyenge hivatkozást (weak self) használni a zárványokat tartalmazó kódban?
sobes.tech MI
Válasz az MI-től
A gyenge hivatkozás (weak self) használata szükséges a erős hivatkozási ciklusok (retain cycle) megelőzése érdekében, amelyek memória szivárgáshoz vezetnek.
Amikor egy closure erős hivatkozásként fogja meg self-et, és self tartalmazza ezt a closure-t (például egy tulajdonságban), kölcsönösen tartják egymást, és egyik objektum sem szabadul fel.
Gyenge hivatkozás használatának példája:
someAsyncCall { [weak self] in
guard let self = self else { return }
self.doSomething()
}
Itt, self gyengén van megfogva, így ha a self objektumot megsemmisítik a closure végrehajtása előtt, a closure nem fogja tartani a memóriában, ezáltal megelőzve a memória szivárgást.