Sobes.tech
Junior — Middle

Como é que a memória dos objetos criados usando um tipo de referência é libertada?

sobes.tech IA

Resposta da IA

No iOS, os objetos criados usando tipos de referência (por exemplo, classes em Swift ou Objective-C) são geridos pelo sistema de contagem de referências (ARC — Automatic Reference Counting). Cada objeto mantém um contador de referências — o número de referências ativas a ele. Quando uma nova referência ao objeto é criada, o contador aumenta, e quando a referência deixa de ser usada (por exemplo, uma variável sai do escopo ou é atribuída a nil), o contador diminui.

Quando o contador de referências de um objeto atinge zero, significa que ninguém mais faz referência a ele, e a memória ocupada pelo objeto é liberada automaticamente. Isso ajuda a evitar fugas de memória sem necessidade de gestão manual.

Exemplo em Swift:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Pessoa \(name) liberada")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // o contador de referências aumentou
p1 = nil // o contador diminuiu, mas o objeto ainda vive
p2 = nil // o contador chegou a 0, o objeto foi liberado

É importante evitar referências cíclicas (cycles de retenção), quando dois objetos se referenciam mutuamente, o que impede a liberação de memória. Para isso, usam-se referências fracas (weak) ou sem proprietário (unowned).