Junior — Middle
Em que situações o uso de um contador de referências para gerir a memória pode não aumentar o contador para um objeto?
sobes.tech IA
Resposta da IA
A utilização do contador de referências (reference counting) não leva ao aumento do contador nas seguintes situações:
- Referências fracas (weak references): elas não aumentam o contador para evitar dependências cíclicas. Por exemplo, no iOS com ARC, referências fracas são declaradas com
weak. - Referências não proprietárias (unowned references): semelhantes às fracas, mas assumem que o objeto existe sempre e também não aumentam o contador.
- Otimizações internas do compilador ou runtime: às vezes, as referências podem ser otimizadas de modo que o contador não mude.
Exemplo de referência fraca em Swift:
class Person {
var name: String
weak var apartment: Apartment? // não aumenta o contador
init(name: String) {
self.name = name
}
}
class Apartment {
var unit: String
init(unit: String) {
self.unit = unit
}
}
Aqui, apartment é uma referência fraca que não aumenta o contador do objeto Apartment.