Avatar ·

É 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