Sobes.tech
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.