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.