3. Все ли value type по умолчанию поддерживают copy-on-write?

Темы

Компании

Ответ

Нет, copy-on-write не свойство всех value type.

Снаружи это всё равно value type: правка одной копии не меняет другую. Данные копируют не при присваивании, а в момент изменения, и только если ими ещё пользуется другая переменная.

По умолчанию механизм есть у таких типов:

  • Array, ContiguousArray, Dictionary, Set, String
  • ArraySlice, Substring
  • Data, AttributedString

Обычный struct копирует поля сразу. Copy-on-write у него нужно делать самому, т.е. class в куче и isKnownUniquelyReferenced перед записью.