Junior
Quelle est la différence entre les types de référence et les types de valeur?
sobes.tech IA
Réponse de l'IA
Les types de valeur (Value Types) sont copiés lors de l'affectation ou du passage à une fonction. Chaque instance possède sa propre copie des données.
Les types de référence (Reference Types) lors de l'affectation ou du passage à une fonction, transmettent une référence à la même instance de données. Modifier les données via une référence affectera toutes les autres références à cette même instance.
| Caractéristique | Type de valeur (Value Type) | Type de référence (Reference Type) |
|---|---|---|
| Comportement lors de l'affectation/passage | Copie | Passage de la référence |
| Emplacement en mémoire | Pile (Heap) | Tas (Stack) |
| Gestion de la mémoire | Automatique (via la pile) | Automatique (ARC) |
| Exemples en Swift | struct, enum, tuple |
class, func, closure |
// Exemple de Type de Valeur (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtient une copie de p1
p2.x = 10 // Modifier p2 n'affecte pas p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Exemple de Type de Référence (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 référence le même objet que c1
c2.x = 10 // Modifier c2 affecte c1, car ils pointent vers le même objet
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10