Junior — Middle
Pode explicar o que significa o termo 'Unowned' no contexto da gestão de memória?
sobes.tech IA
Resposta da IA
No contexto da gestão de memória em iOS (e Swift), o termo "Unowned" significa uma referência fraca a um objeto que não aumenta o contador de referências (retain count), mas que assume que o objeto existe durante o uso dessa referência.
Diferenças em relação a weak:
- A referência
weakpode tornar-senilse o objeto for removido, e por isso é declarada como opcional. - A referência
unownednão é opcional e não é automaticamente definida comonil. Se o objeto ao qualunownedse refere for removido, uma tentativa de acessá-lo resultará em erro em tempo de execução (crash).
Usa-se quando se garante que a duração de vida do objeto referenciado é maior ou igual à duração da referência.
Exemplo:
class Owner {
var pet: Pet?
}
class Pet {
unowned let owner: Owner
init(owner: Owner) {
self.owner = owner
}
}
let owner = Owner()
owner.pet = Pet(owner: owner)
Aqui, Pet mantém uma referência unowned a Owner, assumindo que Owner vive mais do que Pet.