Swift, Strings e endereços de memória
Há algo que não estou entendendo sobre como o Swift gerencia o endereço de memória deString(s)
Aquifoo
eboo
são 2 ponteiros para omesma localização de memória.
class Foo { }
let foo = Foo()
let boo = foo
unsafeAddressOf(foo) // "UnsafePointer(0x7FCD13719BE0)"
unsafeAddressOf(boo) // "UnsafePointer(0x7FCD13719BE0)"
Boa.
2. Tipos de valorlet word0 = "hello"
let word1 = word0
Agoraword0
eword1
estãovalue types
mas aqui ocopy on write
mecanismo está envolvido.
[...] No entanto, Swift só executa uma cópia real nos bastidores quando é absolutamente necessário fazê-lo. O Swift gerencia toda a cópia de valor para garantir o desempenho ideal, e você não deve evitar a atribuição para tentar antecipar essa otimização.https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134
Então, por que eles têm 2 endereços de memória diferentes?
unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
mais 3Observe também queString
é umstruct
estede alguma forma paraAnyObject
.
Testado com o Xcode 7 GM Playground e o Swift 2.0.