Свифт, струны и адреса памяти

Есть кое-что, чего я не понимаю о том, как Swift управляет адресом памятиString(s)

1. Типы ссылок

Вотfoo а такжеboo 2 указателя ната же ячейка памяти.

class Foo { }

let foo = Foo()
let boo = foo

unsafeAddressOf(foo) // "UnsafePointer(0x7FCD13719BE0)"
unsafeAddressOf(boo) // "UnsafePointer(0x7FCD13719BE0)" 

Хорошо.

2. Типы значений
let word0 = "hello"
let word1 = word0

Сейчасword0 а такжеword1 являютсяvalue types но здесьcopy on write механизм задействован.

[...] Тем не менее, Swift выполняет фактическое копирование за кулисами только тогда, когда это абсолютно необходимо. Swift управляет всем копированием значений, чтобы обеспечить оптимальную производительность, и вам не следует избегать присвоения, чтобы попытаться опередить эту оптимизацию.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134

Так почему у них 2 разных адреса памяти?

unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
3. Больше

Также обратите внимание, чтоString этоstruct тоткак-то соответствует вAnyObject.

Протестировано с игровой площадкой Xcode 7 GM и Swift 2.0.

Ответы на вопрос(2)

Ваш ответ на вопрос