Sobes.tech
Junior

Qual é a diferença entre tipos de referência e tipos de valor?

sobes.tech IA

Resposta da IA

A referência armazena um endereço na memória que aponta para os dados armazenados lá. De fato, a variável que armazena a referência possui apenas esse endereço, não os dados em si. A atribuição de um tipo de referência a uma variável copia a referência, não os dados. As alterações nos dados aos quais a referência aponta refletem-se em todas as variáveis que armazenam essa referência.

O tipo de valor armazena diretamente os dados. A atribuição de um tipo de valor a uma variável copia os próprios dados. As alterações numa variável de tipo de valor não afetam outras variáveis que receberam essa cópia.

Característica Tipo de referência Tipo de valor
Armazenamento Referência aos dados Os próprios dados
Atribuição Cópia da referência Cópia dos dados
Alteração Afeta todas as referências Não afeta as cópias
Localização No heap (Heap) Na pilha (Stack)
Liberação ARC / coletor de lixo Automaticamente ao sair do escopo
Exemplos em Swift class, closure struct, enum, tuple, tipos básicos (Int, Bool, String, etc.)
// Exemplo de tipo de referência (classe)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // A referência é copiada
ref2.value = 20 // Os dados apontados por ref1 e ref2 mudam
print(ref1.value) // Saída: 20
print(ref2.value) // Saída: 20

// Exemplo de tipo de valor (estrutura)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Os dados são copiados
val2.value = 20 // Apenas os dados em val2 mudam
print(val1.value) // Saída: 10
print(val2.value) // Saída: 20