Sobes.tech
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 weak pode tornar-se nil se o objeto for removido, e por isso é declarada como opcional.
  • A referência unowned não é opcional e não é automaticamente definida como nil. Se o objeto ao qual unowned se 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.