Swift, cadenas y direcciones de memoria

Hay algo que no entiendo acerca de cómo Swift administra la dirección de memoria deString(s)

1. Tipos de referencia

aquífoo yboo son 2 punteros a lamisma ubicación de memoria.

class Foo { }

let foo = Foo()
let boo = foo

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

Bueno.

2. Tipos de valor
let word0 = "hello"
let word1 = word0

Ahoraword0 yword1 sonvalue types pero aqui elcopy on write El mecanismo está involucrado.

[...] Sin embargo, Swift solo realiza una copia real detrás de escena cuando es absolutamente necesario hacerlo. Swift gestiona todas las copias de valor para garantizar un rendimiento óptimo, y no debe evitar la asignación para tratar de evitar esta optimización.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134

Entonces, ¿por qué tienen 2 direcciones de memoria diferentes?

unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
3 más

También tenga en cuenta queString es unstruct esede alguna manera se ajusta aAnyObject.

Probado con Xcode 7 GM Playground y Swift 2.0.

Respuestas a la pregunta(2)

Su respuesta a la pregunta