Ответ
Copy-on-Write (CoW) — это стратегия оптимизации, при которой копирование данных структуры или коллекции происходит не в момент присваивания, а только при первой попытке её модификации.
Как это работает в Swift:
var originalArray = [1, 2, 3]
var copiedArray = originalArray // Нет реального копирования. Оба массива ссылаются на один буфер.
// Модификация триггерит копирование:
copiedArray.append(4) // Здесь создается физическая копия данных для `copiedArray`.
print(originalArray) // [1, 2, 3]
print(copiedArray) // [1, 2, 3, 4]
Ключевые аспекты:
- Экономия ресурсов: Память не расходуется на копии, которые никогда не будут изменены.
- Автоматизация: Swift автоматически реализует CoW для своих стандартных типов-значений (
Array,Dictionary,Set,String) и пользовательских структур, хранящих данные в куче. - Ручная реализация: Для собственных структур, которым нужна эта оптимизация, можно использовать
isKnownUniquelyReferencedдля проверки уникальности ссылки на хранимые данные.final class Ref<T> { var value: T init(_ value: T) { self.value = value } }
struct MyCoWStruct