gpt4 book ai didi

swift - 在空的 swift 项目中 deinit 未调用

转载 作者:可可西里 更新时间:2023-11-01 01:39:42 24 4
gpt4 key购买 nike

如果我使用 xcode(6.3.2) 创建一个新的“单 View 应用程序”项目,并且只向 ViewController 添加一个 deinit 函数。运行应用程序,关闭应用程序。 Deinit 永远不会被调用!我使用多个设备和模拟器对其进行了测试。

deinit {
println("deinit:")
}

这是为什么呢?这是标准行为吗?我该怎么做才能让它发挥作用?

/* 编辑 */阅读评论后,我将此代码放入我的 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 调用中手动清理我的对象,因为 View Controller deinit 函数不可靠?

最佳答案

没有。在这种情况下,甚至不会调用 ViewController deinit,因为 ViewController 不会内存不足。

测试这个的方法是创建一个新的 ViewController 并用它替换当前的 ViewController。这应该从内存中删除您当前的 ViewController,因此调用它的 deinit 方法。

关于swift - 在空的 swift 项目中 deinit 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31112232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com