Sobes.tech
Middle

Como é que a gestão de memória para tipos de referência funciona em Swift?

sobes.tech IA

Resposta da IA

Em Swift, a gestão de memória para tipos de referência (classes) é feita através de contagem automática de referências (ARC, Automatic Reference Counting). Cada objeto no heap mantém um contador de referências: o número de referências ativas a esse objeto. Quando uma nova referência a um objeto é criada, o contador aumenta, e quando a referência deixa de ser usada, diminui. Quando o contador atinge zero, o objeto é automaticamente removido da memória.

Exemplo:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var a: Person? = Person(name: "Alice") // contador = 1
var b = a                             // contador = 2
b = nil                              // contador = 1
a = nil                              // contador = 0, objeto removido

É importante evitar ciclos de referências (retained cycles), onde dois objetos referenciam-se mutuamente, o que impede a liberação da memória. Para isso, usam-se referências fracas (weak) e sem proprietário (unowned).

Tipos de valor (estruturas, enumerações) são armazenados na pilha e copiados na atribuição, portanto, o ARC não se aplica a eles.