gpt4 book ai didi

swift - deinit 未在样板 macOS 应用程序上调用

转载 作者:行者123 更新时间:2023-11-28 05:50:46 33 4
gpt4 key购买 nike

我已经从 macOS Cocoa 应用程序模板创建了新应用程序。我所做的唯一更改是在 NSViewController 中添加了 deinit。所以现在它看起来像这样(完整代码):

import Cocoa

class ViewController: NSViewController {

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}

override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}

func doSomething()
{
var a = 10
a = a + 1
print(a)
}

deinit {
doSomething()
print("deinit called")
}
}

为什么我看不到 deinit 调用?我在这里搜索了很多问题,但找不到答案,因为我没有任何保留周期。

最佳答案

正如 Tobi 在他的回答中所说,deinit 在对象被释放之前被调用。

当不再有任何强引用时,对象将被释放。 (没有人再拥有该对象。)

为了回答您的具体问题,您需要查看 View Controller 的创建方式以及所有者。

我有一段时间没有做过太多的 Mac 开发,所以我对 View Controller 的生命周期有点生疏,但这是我对它如何工作的记忆:

如果你只有一个应用程序窗口,它是 View Controller 的所有者,并且窗口永远不会关闭,这意味着 View Controller 永远不会被释放。

如果您退出该应用程序,我不认为系统会在终止该应用程序之前拆除您的窗口层次结构(除非您的应用程序是基于文档的应用程序,在这种情况下,该应用程序将被告知关闭所有它的退出前记录窗口。)

关于swift - deinit 未在样板 macOS 应用程序上调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53031986/

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