Swift, Strings und Speicheradressen
Es gibt etwas, was ich nicht verstehe, wie Swift die Speicheradresse von @ verwaltString(s)
Hierfoo
undboo
sind 2 Zeiger auf das gleicher Speicherort.
class Foo { }
let foo = Foo()
let boo = foo
unsafeAddressOf(foo) // "UnsafePointer(0x7FCD13719BE0)"
unsafeAddressOf(boo) // "UnsafePointer(0x7FCD13719BE0)"
Gut
2. Werttypenlet word0 = "hello"
let word1 = word0
Jetztword0
undword1
sindvalue types
aber hier dascopy on write
Mechanismus ist beteiligt.
[...] Swift führt jedoch nur dann eine tatsächliche Kopie hinter den Kulissen durch, wenn dies unbedingt erforderlich ist. Swift verwaltet das Kopieren aller Werte, um eine optimale Leistung zu gewährleisten. Sie sollten die Zuweisung nicht vermeiden, um diese Optimierung zu verhindern.https: //developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_13
Warum haben sie 2 verschiedene Speicheradressen?
unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
3. Mehitte beachten Sie auch, dassString
ist einstruct
Das irgendwie entspricht zuAnyObject
.
Getestet mit Xcode 7 GM Playground und Swift 2.0.