¿Siempre es necesario usar [unowned self] en closures en Swift?
¡Hola a todos! Soy un desarrollador iOS principiante y no logro entender los ciclos de referencias fuertes (retain cycles) en closures.
Aquí hay un ejemplo simple: hago una solicitud de red dentro del controlador.
```swift
class ProfileViewController: UIViewController {
var nameLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
fetchUserProfile()
}
func fetchUserProfile() {
APIClient.shared.getUserProfile { [weak self] profile in
self?.nameLabel.text = profile.name
}
}
}
```
Veo que muchos usan `[weak self]`, pero algunos escriben `[unowned self]`. ¿Cuál es la diferencia? ¿Cuándo se debe usar `unowned`? ¿O es mejor usar siempre `weak`?
He oído que `unowned` puede causar un crash si el objeto ya fue liberado. Pero entonces, ¿para qué sirve? ¿Quizás hay casos donde weak no es suficiente o es incómodo?
Por favor, explíquenme con ejemplos: en qué situaciones unowned es seguro y en cuáles no. Y