Sobes.tech
Middle

O que significa que o tipo de valor (value type) pertence ao tipo de referência (reference type)?

sobes.tech IA

Resposta da IA

O valor do tipo é copiado ao atribuir ou passar para uma função, enquanto que o valor do tipo de referência é passado por referência, ou seja, o ponteiro para a instância existente é copiado.

Tipos de Valor (Value Types):

  • Estruturas (struct)
  • Enumerações (enum)
  • Tuples (tuple)
  • A maioria dos tipos básicos (Int, String, Bool, Array, Dictionary, Set, etc.)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // O valor de p1 é copiado para p2
p2.x = 10

// p1.x ainda é 1, p2.x tornou-se 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")

Tipos de Referência (Reference Types):

  • Classes (class)
  • Funções (closures de funções)
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 o mesmo exemplo que c1
c2.x = 10

// c1.x também se tornou 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")

Principais diferenças:

Característica Tipo de Valor (Value Type) Tipo de Referência (Reference Type)
Atribuição Cópia do valor Cópia da referência (ponteiro)
Memória Alocada na pilha (para casos simples) Alocada no heap
Uso compartilhado Cada variável tem sua própria cópia Várias variáveis podem referenciar a mesma instância
Mutabilidade Para modificar, é preciso modificar a cópia A alteração através de uma referência é visível para todos

No desenvolvimento iOS, ambos os tipos são frequentemente utilizados. Conhecendo suas diferenças, você pode escolher o tipo adequado para cada tarefa e evitar efeitos colaterais indesejados, especialmente ao trabalhar com dados mutáveis.