Swift如何处理确定性终结?

3

我来自C#背景,据我了解Swift像C#一样具有自动内存管理。

C#存在一个问题需要使用“编程模式”,即及时释放资源,因为垃圾收集器在未定义的时间运行,因此不能用来关闭文件、释放网络连接等。(因此有IDisposable和“using”关键字)

在Swift编程中如何处理这个问题?


C# 是一种垃圾回收语言,Swift 有 ARC(自动引用计数)。那是完全不同的东西。了解 ARC,它的工作方式与 Objective-C 相同。 - Leandros
2个回答

2

Swift似乎使用了与启用ARC的Objective-C相同的内存管理模型。

这意味着没有垃圾回收器。相反,当(strong)引用被设置时,ARC使用编译器插入的增量和减量操作来进行引用计数。

没有(线程化的)收集器意味着在Swift中完成最后处理是确定性的。对象在最后一个引用超出范围时被释放。


你知道这个如何处理被多个线程引用的对象吗? - Ian Ringrose
线程并没有真正改变引用计数的行为 - 只是必须原子性地检测计数器归零并释放对象的情况。这就是 ARC 的情况,并且即使对于弱引用也能正常工作。实际上,至少从 Cheetah(10.0)开始,“retain”和“release”就是线程安全的。 - Nikolai Ruhe

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接