Junior — Middle
Como é que a gestão e distribuição de memória ocorre em Swift?
sobes.tech IA
Resposta da IA
Em Swift, a gestão de memória ocorre através do mecanismo ARC (Contagem Automática de Referências). O ARC rastreia automaticamente o número de referências às instâncias de classes e liberta a memória quando o número de referências chega a zero.
Pontos principais:
- O ARC funciona apenas com classes (tipos de referência), enquanto estruturas e enumerações (tipos de valor) são armazenadas na pilha e copiadas na atribuição.
- Quando uma nova referência a um objeto é criada, o contador aumenta.
- Quando uma referência é removida ou se torna nil, o contador diminui.
- Se o contador atingir zero, o objeto é automaticamente desinicializado e a memória é libertada.
É importante evitar referências cíclicas ( ciclos de retenção), quando dois objetos referenciam-se mutuamente, o que impede a libertação da memória. Para isso, usam-se referências fracas (weak) e sem proprietário (unowned).
Exemplo:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Иван")
var person2 = person1 // o contador de referências aumenta
person1 = nil // o objeto ainda vive, pois person2 refere-se a ele
person2 = nil // agora o objeto é libertado