gpt4 book ai didi

swift - 在特定情况下不调用 deinit

转载 作者:搜寻专家 更新时间:2023-10-31 22:55:25 24 4
gpt4 key购买 nike

我有以下测试用例:我希望 deinit 在程序终止时被调用,但它从来没有。我是 Swift 的新手,但不认为这是预期的行为。 (这不是在 Playground 上)

class Test
{
init() {
print( "init" )
}

deinit {
print( "deinit" )
}
}

print("Starting app")

var test = Test()

print( "Ending App" )

输出是:

Starting app
init
Ending App
Program ended with exit code: 0

如果我将代码放在一个函数中,然后调用该函数,我会得到预期的结果

Starting app
init
Ending App
deinit
Program ended with exit code: 0

不应该在程序终止时调用对象的 deinit 吗?

最佳答案

I expect deinit to be called at program termination

你不应该期望那样。程序终止时存在的对象通常不会被释放。内存清理留给操作系统(它释放所有程序的内存)。这是 Cocoa 中长期存在的加速程序终止的优化。

deinit 仅用于释放资源(例如释放不在 ARC 下的内存)。在 ObjC 或 Swift 中没有等效的 C++ 析构函数。 (C++ 和 Objective-C++ 对象在程序终止期间被销毁,因为这是规范所要求的。)

关于swift - 在特定情况下不调用 deinit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950833/

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