Sobes.tech
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