Junior — Middle
Meg tudná magyarázni, mit jelent a gyenge hivatkozás használata a self-re a zárványokban?
sobes.tech MI
Válasz az MI-től
iOS (Swift) környezetben záradékokban (closures) self-re való gyenge hivatkozás (weak reference) használata segít elkerülni a tartási ciklusokat (retain cycles), amelyek memória szivárgáshoz vezetnek. Amikor egy záradék erős hivatkozásként fogja meg self-t, és self tartalmazza ezt a záradékot, akkor egymást tartják, és a memória nem szabadul fel.
Példa:
class MyClass {
var closure: (() -> Void)?
func setup() {
closure = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Action")
}
}
Itt a [weak self] azt jelenti, hogy a záradékon belül self gyenge hivatkozás lesz, és ha az objektum megsemmisül, a hivatkozás nil lesz, ezáltal megelőzve a memória szivárgását.