Какие типы значений в Swift поддерживают копирование при записи?

Я прочитал о реализации копирования при записи для Array в Swift здесь.

Массивы, как и все коллекции переменного размера в стандартной библиотеке, используют оптимизацию копирования при записи. Несколько копий массива используют одно и то же хранилище, пока вы не измените одну из копий. Когда это происходит, изменяемый массив заменяет свое хранилище собственной уникальной копией, которая затем модифицируется на месте. Иногда применяются оптимизации, которые могут уменьшить объем копирования.

Мне интересно, есть ли у вас какая-либо информация о том, какая структура поддерживает копирование при записи.


person SwiftyFinch    schedule 22.07.2017    source источник


Ответы (1)


Запись с копированием поддерживается для String и всех типов коллекций — Array, Dictionary и Set.

Кроме того, компилятор может оптимизировать доступ к любой структуре и эффективно предоставить вам семантику копирования при записи, но это не гарантируется.

person Dalija Prasnikar    schedule 22.07.2017
comment
не гарантировано - это один из способов выразить это. Если вам нужна семантика копирования при записи, вы используете isKnownUniquelyReferenced(&ref) явно. (также вы должны вызывать эту функцию только из мутирующих методов с соответствующей синхронизацией потоков; обратите внимание, что текст не указывает на то, как управляют стандартные несинхронизированные коллекции, чтобы избежать нарушения этого. И этот официальный документ) marcosantadev.com/copy-write-swift-value-types - person sourcejedi; 27.09.2017
comment
Я не думаю, что это функция компилятора. Нигде так не сказано. - person PabloR; 11.03.2018