Junior
Qual é a diferença entre tipos de referência e tipos de valor?
sobes.tech IA
Resposta da IA
Os Tipos de Valor (Value Types) são copiados ao atribuir ou passar para uma função. Cada instância tem a sua própria cópia dos dados.
Os Tipos de Referência (Reference Types), ao serem atribuídos ou passados para uma função, passam uma referência à mesma instância de dados. Alterar os dados através de uma referência afetará todas as outras referências a essa mesma instância.
| Característica | Tipo de Valor (Value Type) | Tipo de Referência (Reference Type) |
|---|---|---|
| Comportamento ao atribuir/passar | Cópia | Passagem de referência |
| Localização na memória | Pilha (Heap) | Montão (Stack) |
| Gestão de memória | Automática (através da pilha) | Automática (ARC) |
| Exemplos em Swift | struct, enum, tuple |
class, func, closure |
// Exemplo de Tipo de Valor (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 recebe uma cópia de p1
p2.x = 10 // Alterar p2 não afeta p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Exemplo de Tipo de Referência (Classe)
class Coordinate {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 referencia ao mesmo objeto que c1
c2.x = 10 // Alterar c2 afeta c1, pois ambos apontam para o mesmo objeto
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10