Sobes.tech
Junior — Middle

Como é que a memória ocupada por um objeto num programa é libertada?

sobes.tech IA

Resposta da IA

No iOS, a libertação de memória ocorre principalmente automaticamente graças ao sistema ARC (Contagem Automática de Referências). Cada objeto tem um contador de referências, que aumenta ao criar uma nova referência forte e diminui ao removê-la. Quando o contador chega a zero, o objeto é destruído automaticamente e a memória é libertada.

Se no código surgirem referências cíclicas (por exemplo, dois objetos com referências fortes entre si), a memória não é libertada. Para resolver este problema, usam-se referências fracas (weak) ou sem proprietário (unowned).

Exemplo:

class Person {
    var name: String
    weak var apartment: Apartment? // referência fraca para evitar ciclo
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // referência sem proprietário
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Desta forma, a libertação de memória ocorre automaticamente se as referências forem geridas corretamente.