É sempre necessário usar [unowned self] em closures em Swift?
Olá a todos! Sou um desenvolvedor iOS iniciante e não consigo entender os ciclos de referência forte (retain cycles) em closures.
Aqui está um exemplo simples: estou fazendo uma requisição de rede dentro de um controller.
```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
}
}
}
```
Vejo que muitos usam `[weak self]`, mas alguns escrevem `[unowned self]`. Qual é a diferença? Quando devo usar `unowned`? Ou é melhor sempre usar `weak`?
Ouvi dizer que `unowned` pode causar crash se o objeto já foi desalocado. Mas então para que ele serve? Talvez haja casos em que weak não é suficiente ou é inconveniente?
Por favor, expliquem com exemplos: em quais situações unowned é seguro, e em quais não é. E