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.