Junior — Middle
How and in what cases are weak references used inside closures?
sobes.tech AI
Answer from AI
In iOS, when working with closures, a common issue is cyclic references, where an object captures a closure, and the closure captures the object, leading to memory leaks. To avoid this, weak references are used inside closures.
A weak reference does not increase the reference count of an object, so if there are no strong references, the object can be deallocated.
Example of using a weak reference inside a closure:
class ViewController {
var completionHandler: (() -> Void)?
func setup() {
completionHandler = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Action performed")
}
}
Use cases:
- When a closure captures self or other objects to avoid retain cycles.
- In asynchronous operations where the object might be destroyed before the closure executes.
Using weak references helps manage memory and prevent leaks.