Junior
Onde são armazenados os tipos de dados em Swift?
sobes.tech IA
Resposta da IA
Os tipos de dados em Swift são armazenados em duas áreas principais de memória: a pilha e o heap.
Pilha
- Tipos de valor (tipos de valor):
struct(estruturas)enum(enumerações)- Tipos básicos, como
Int,Double,Bool,String(strings curtas podem ser armazenadas diretamente na pilha para otimização)
- Os dados são armazenados diretamente na pilha na ordem de execução das funções.
- A alocação e liberação de memória ocorre automaticamente e muito rapidamente (LIFO - Last In, First Out).
Heap
- Tipos de referência (tipos de referência):
class(classes)- Funções e closures
- Objetos (
AnyObject)
- Os objetos em si são armazenados no heap, e na pilha há apenas referências a eles.
- A alocação e liberação de memória no heap ocorre de forma dinâmica e é gerenciada pelo sistema (Automatic Reference Counting - ARC).
- O acesso aos dados no heap é indireto, através de um ponteiro.
Características
- Ao atribuir um tipo de valor, toda a valor é copiada.
- Ao atribuir um tipo de referência, apenas a referência é copiada, e ambos os objetos apontam para a mesma área de memória no heap.
- O ARC rastreia o número de referências fortes aos objetos no heap e libera automaticamente a memória quando não há mais referências.
// Exemplo de tipo de valor - armazenado na pilha
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 10, y: 20)
var p2 = p1 // Toda a valor é copiada
p2.x = 30 // p1 não muda
print("p1: \(p1), p2: \(p2)") // Saída: p1: Point(x: 10, y: 20), p2: Point(x: 30, y: 20)
// Exemplo de tipo de referência - armazenado no heap
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
}
var c1 = Circle(radius: 5.0)
var c2 = c1 // Apenas a referência é copiada
c2.radius = 10.0 // c1 também muda, pois ambos apontam para o mesmo objeto no heap
print("c1.radius: \(c1.radius), c2.radius: \(c2.radius)") // Saída: c1.radius: 10.0, c2.radius: 10.0