Qual é a diferença entre referências weak e unowned em Swift no gerenciamento de memória?
Olá a todos! Estou estudando Swift e tentando entender o ARC (Automatic Reference Counting). Li a documentação, mas não consigo entender a diferença entre referências weak e unowned. Ambas parecem não aumentar o contador de referências, mas qual é a diferença?
Tenho um exemplo assim. Estou escrevendo um aplicativo simples com perfil de usuário e seu avatar. Se o usuário sai da tela, quero que o objeto Profile e seu Avatar sejam liberados da memória. Mas estou obtendo um vazamento de memória devido a um ciclo de referências fortes.
Aqui está meu código simplificado:
```swift
class Profile {
let name: String
var avatar: Avatar?
init(name: String) {
self.name = name
print("Profile \(name) created")
}
deinit {
print("Profile \(name) deallocated")
}
}
class Avatar {
let imageName: String
var profile: Profile? // Aqui está o problema
init(imageName: String) {
self.imageName = imageName
print("Avatar \(imageName) created")
}
}