【发布时间】:2015-06-29 09:30:34
【问题描述】:
如果我使用 xcode(6.3.2) 创建一个新的“单视图应用程序”项目,并且只向 ViewController 添加一个 deinit 函数。运行应用程序,关闭应用程序。 Deinit 永远不会被调用!我用几台设备和模拟器对其进行了测试。
deinit {
println("deinit:")
}
这是为什么呢?这是标准行为吗?我该怎么做才能让它发挥作用?
/* 编辑 */ 在阅读完 cmets 之后,我把这段代码放到了我的 Viewcontroller 中。
import UIKit
class A {
func test() {
println("A test")
}
deinit {
println("A deinit")
}
}
class ViewController: UIViewController {
var a:A? = A()
override func viewDidLoad() {
super.viewDidLoad()
println("ViewController viewDidLoad")
a?.test()
}
override func viewDidDisappear(animated:Bool) {
println("ViewController viewDidDisappear")
a = nil
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
println("ViewController didReceiveMemoryWarning")
}
deinit {
println("ViewController deinit")
a = nil
}
}
现在我明白了
ViewController viewDidLoad:
A test
ViewController viewDidDisappear:
A deinit
这是否意味着我必须在 viewDidDisappear 调用中手动清理我的对象,因为视图控制器的 deinit 函数不可靠?
【问题讨论】:
-
这个 ViewController 是否存在内存不足的时间点?你用另一个 viewController 替换这个 viewController 吗?
-
没有。我所做的只是添加 deinit。没有其他的。您可以通过创建一个新的“单一视图应用程序”项目来测试它。然后使用 println 和/或断点添加 deinit。
-
Rob 是对的,它是重复的