swift学习iOS Swift && Objective-C

有趣的unowned(unsafe)

2016-11-28  本文已影响98人  inclee

逛git时,看到一段代码:源地址:https://gist.github.com/hoshi-takanori/07b2982c9942ebe186c530fa611921bb
<pre>
class Person {
let name: String
init(name: String) { self.name = name }
func printName() { print("name = (name)") }
deinit { print("(name) is being deinited") }
}

var p: Person? = Person(name: "Hoshi")
p?.printName() // name = Hoshi
unowned(unsafe) let q = p!
q.printName() // name = Hoshi
p = nil
//q.printName() // incorrect checksum for freed object - object was probably modified after being freed.
let pp = Person(name: "Takanori")
q.printName() // name = Takanori
</pre>
当q.printName()打印:name = Takanori ,我想多少人会WTF。“计算机是不会干错事的,只是我们没有理解计算机的诚实。”
但是到底为什么会有这样的结果?
Swift内存管理有这么几个部分:

更深入的了解:http://stackoverflow.com/questions/26553924/what-is-the-difference-in-swift-between-unownedsafe-and-unownedunsafe

上一篇 下一篇

猜你喜欢

热点阅读