有一些关于Swift如何管理字符串的内存地址的问题我不太理解。
1. 引用类型
这里foo
和boo
是指向同一内存位置的两个指针。
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
是值类型
,但这里涉及到写时复制
机制。[...] 然而,Swift仅在绝对必要时才在后台执行实际的复制。Swift管理所有值复制以确保最佳性能,并且您不应避免赋值以尝试预先进行此优化。https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_134 那么它们为什么有两个不同的内存地址?
unsafeAddressOf(word0) // "UnsafePointer(0x7FCD1342ACE0)"
unsafeAddressOf(word1) // "UnsafePointer(0x7FCD13414260)"
3. 更多
请注意,String
是一个以某种方式符合AnyObject
的struct
。
已使用Xcode 7 GM Playground和Swift 2.0进行测试。