После просмотра build better apps with value type. В примере с фотошопом они произвели, что они сказали, чтоКак Swift реализовать поведение копирования Array в режиме записи?
Единственное, что копируется в двух экземплярах этой диаграммы, это плитки, которые содержат рубашку человека. Поэтому, несмотря на то, что у меня есть два разных документа, старое состояние и новое состояние, единственные новые данные, которые я должен был потреблять, в результате это плитки, содержащиеся в рубашке этого человека.
Итак, я начинаю удивляться, как выглядят эти два массива в памяти. Поэтому я немного экспериментирую.
struct Test {
var i: Int
var j: Int
}
var valueArray = [Test(i: 1, j: 9), Test(i: 2, j: 7)]
var valueArray2 = valueArray
Когда я печатаю valueArray и адрес valueArray2, они не совпадают.
«Может быть, они реализуют это по указателю хранилища в массиве?»
Но когда я печатаю содержимое памяти с использованием lldb, они на самом деле всего 4 Int (1,9,2,7).
Так что я смущен, я еще не изменил массив. И, похоже, они делают копию целого массива? Так где я неправильно понял?
Функция, я использовал для печати адреса структуры, используя метод, предоставляемый @nschum в this question.
func address(o: UnsafePointer<Void>) {
let addr = unsafeBitCast(o, Int.self)
print(NSString(format: "%p", addr))
}
Это не дублирует вопрос this question. Я спрашиваю о языковых перьях, а другой - о навыках программирования.
новые вары действительно созданы, но внутреннее представление будет таким же и будет скопировано при записи внутри. У разработчиков нет доступа к внутренним деталям реализации типов значений. – Shripada
Возможный дубликат [Как создать контейнер с семантикой copy-on-write? (Swift)] (http://stackoverflow.com/questions/32984258/how-can-i-make-a-container-with-copy-on-write-semantics-swift) –
Это не дублирующий вопрос об этом вопрос. Я спрашиваю о языковых перьях, а другой - о навыках программирования. –