Sobes.tech
Junior — Middle

Qual é o papel das referências fracas (weak) e não possuídas (unowned) na gestão de memória em linguagens de programação?

sobes.tech IA

Resposta da IA

Referências fracas (weak) e não possuídas (unowned) são usadas para gerir a memória e evitar ciclos de referências que podem levar a fugas de memória.

  • Referências weak: são referências que não aumentam o contador de referências do objeto. Se o objeto ao qual a referência weak aponta for eliminado, a referência weak torna-se automaticamente nil (em Swift). Isto é útil para evitar ciclos fortes, por exemplo, entre um delegado e o seu proprietário.

  • Referências unowned: também não aumentam o contador de referências, mas assume-se que o objeto existe sempre durante o uso da referência. Se o objeto já tiver sido eliminado, aceder à referência unowned causará um erro (crash). São usadas quando o ciclo de vida do objeto referenciado é garantido que é mais longo do que a referência.

Exemplo em Swift:

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person?  // weak, para evitar ciclo
}

Aqui, a referência weak impede de manter o objeto Person na memória se ele não for mais necessário.