Swift,string和内存地址
有什么我不理解如何Swiftpipe理String(s)内存地址String(s) 
1.引用types
 这里foo和boo是指向相同内存位置的 2个指针。 
 class Foo { } let foo = Foo() let boo = foo unsafeAddressOf(foo) // "UnsafePointer(0x7FCD13719BE0)" unsafeAddressOf(boo) // "UnsafePointer(0x7FCD13719BE0)" 
好。
2.值types
 let word0 = "hello" let word1 = word0 
 现在word0和word1是value types但是这里涉及copy on write机制的copy on write 。 
但是,Swift只有在绝对必要的情况下才会在幕后执行实际的复制。 Swiftpipe理所有值复制以确保最佳性能,并且您不应该避免分配尝试抢占此优化。 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 。 
testing了Xcode 7 GM Playground和Swift 2.0。
 func unsafeAddressOf(object: AnyObject) -> UnsafePointer<Void> 
 需要一个AnyObject参数,即一个类的实例。 它返回指向由object引用的object所使用的存储的指针。 
  addressOf()不能和结构variables一起使用: 
 struct Foo { } var f = Foo() let a = unsafeAddressOf(f) // error: cannot invoke 'unsafeAddressOf' with an argument list of type '(Foo)' 
  String是一个struct , 但是 ,它被自动桥接到NSString时,传递给一个函数期待一个对象。 所以 
 let word0 = "hello" let p1 = unsafeAddressOf(word0) 
实际执行
 let p1 = unsafeAddressOf(word0 as NSString) 
 您不会得到word0variables的地址,而是指向桥接的NSString对象的内存位置的指针。 
 看起来你不能假设这个桥接是否在同一个Swiftstring上重复执行时返回相同的NSString对象(或者更一般地说,是同一个Foundation对象)。 在一个游乐场,甚至 
 let word0 = "hello" let p1 = unsafeAddressOf(word0) let p2 = unsafeAddressOf(word0) let p3 = unsafeAddressOf(word0) 
返回三个不同的地址(但编译项目中的地址相同)。 在数组和字典之间的不同桥接中也做了相同的观察(对于数组和字典)。
Swift 3.0 Unmanaged.passUnretained(object).toOpaque()