Qual é a diferença entre o uso das palavras-chave 'unowned' e 'strong' ao declarar referências em Swift?
sobes.tech IA
Resposta da IA
Em Swift, as palavras-chave strong e unowned são usadas para gerir referências e prevenir ciclos de retenção (retain cycles).
-
strong — é uma referência forte padrão que aumenta o contador de referências do objeto. Enquanto existir pelo menos uma referência forte, o objeto não será removido da memória.
-
unowned — é uma referência fraca, mas não opcional. Ela não aumenta o contador de referências, mas assume que o objeto ao qual se refere sempre existe durante o uso dessa referência. Se o objeto já foi removido, acessar a referência
unownedcausará um erro em tempo de execução.
Exemplo:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Aqui, tenant é declarado como unowned porque o apartamento não deve manter a pessoa com uma referência forte para evitar um ciclo, mas presume-se que a pessoa exista por mais tempo que o apartamento.