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.