rid*_*cuk 6 automatic-ref-counting swift
我目前正在关注Apple文档.这是我的问题:
class Person {
let name: String
init(name: String) {
self.name = name
println("\(name) is being initialized")
}
deinit {
println("\(name) is being deinitialized")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var reference1: Person?
var reference2: Person?
var reference3: Person?
reference1 = Person(name: "John Appleseed")
// prints "John Appleseed is being initialized
reference2 = reference1
reference3 = reference1
reference1 = nil
reference2 = nil
}
}
Run Code Online (Sandbox Code Playgroud)
reference1等于之后nil,ARC释放实例并打印"John Appleseed is being deinitialized"
不应该在之后解除分配reference3 = nil吗?
这里的问题是范围问题.我们可以通过断点找到更多信息.
在这里,我们在初始化之前就停止了reference1.
所有变量都是预期的nil:

并在初始化后reference1?

好的,让我们跳到前面reference2并reference3设置:

所有三个变量都指向相同的内存位置,我们可以看到初始化程序只运行一次.这些都指向同一个位置.
让我们前进一步:

reference1现在指着None.是的nil.该deinitmmethod没有被调用并打印它的消息.
让我们再向前迈进一步:

现在reference1并且reference2都是预期的nil.println我添加的陈述被称为.但deinit没有跑,reference3不是nil.
下一步是完全退出方法.一旦我们退出该方法,变量就超出了范围而deinit被称为:

| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |