I have a ViewController class as shown below:
class ViewController {
var viewModel = ViewModel()
viewDidLoad() {
self.viewModel.showAlert = { [weak self] in
self?.alert()
}
}
func alert() {
// alert logic
}
}
Here is the ViewModel class
class ViewModel {
var showAlert: (() -> Void)?
}
Now, does this create a strong reference cycle or not?
And if this creates one, then what to use - weak or unowned?
This does not create a strong reference cycle, because you used weak self.
ViewController holds a strong reference to ViewModel. ViewModel holds a strong reference to a closure. The closure holds a weak reference to the ViewController:
VC ---strong---> ViewModel
^ |
| strong
| v
--------weak-----closure
As long as ViewController is deallocated (this happens when you dismiss it for example), ViewModel will be as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With