Milyen körülmények között kell gyenge (weak) hivatkozást használni egy zárvány (closure) belsejében?
sobes.tech MI
Válasz az MI-től
Az iOS-ban a zárójelek (closures) belsejében lévő gyenge (weak) hivatkozásokat (references) arra használják, hogy megakadályozzák az erős (strong) hivatkozási ciklusokat (retain cycles), amelyek memória szivárgáshoz vezethetnek. Ez általában akkor fontos, amikor egy zárójel egy objektumot (például self) fog meg, és ezt az objektum tartja fenn, így kölcsönösen erős hivatkozás alakul ki.
Használja a weak-et, hogy a self-re hivatkozzon a zárójelben, ha a zárójel az objektum egyik tulajdonságaként van tárolva, vagy hosszabb ideig élhet, mint a függvényhívás, így elkerülve az objektum memória szerinti megtartását a felszabadítása után.
Swift példával:
class ViewController {
var completion: (() -> Void)?
func setup() {
completion = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Művelet végrehajtva")
}
}
Ebben a példában a [weak self] megakadályozza a ViewController és a completion zárójel közötti erős ciklust.