Sobes.tech
Junior — Middle

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 unowned causará 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.