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