Sobes.tech
Middle

Czy standardowe kolekcje tablic są typami wartości i typami referencyjnymi?

sobes.tech AI

Odpowiedź od AI

Tablice (Array) w Swift są strukturami (struct), a struktury są typami wartości (Value Types). Podczas przypisywania lub przekazywania tablicy, tworzona jest jej kopia.

Jednak w celu optymalizacji wydajności, system kopiowania tablic ma zachowanie Copy-on-Write. Oznacza to, że faktyczna kopia danych tablicy następuje dopiero przy pierwszej modyfikacji jednej z kopii. Do tego momentu obie kopie współdzielą ten sam magazyn danych.

Typy wartości: Struct, Enum, Int, String, Double, Bool. Typy referencyjne: Class, Function, Closure.

Przykład ilustrujący Copy-on-Write:

var initialArray = [1, 2, 3]
var copiedArray = initialArray // Jeszcze nie ma faktycznej kopii danych

print(initialArray[0]) // 1
print(copiedArray[0])  // 1

copiedArray[0] = 10     // Tu następuje faktyczna kopia danych

print(initialArray[0]) // 1 (oryginalna tablica się nie zmieniła)
print(copiedArray[0])  // 10 (zmieniła się tylko skopiowana wersja)