Avatar ·

¿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