我来自C#背景,据我了解Swift像C#一样具有自动内存管理。
C#存在一个问题需要使用“编程模式”,即及时释放资源,因为垃圾收集器在未定义的时间运行,因此不能用来关闭文件、释放网络连接等。(因此有IDisposable和“using”关键字)
在Swift编程中如何处理这个问题?
我来自C#背景,据我了解Swift像C#一样具有自动内存管理。
C#存在一个问题需要使用“编程模式”,即及时释放资源,因为垃圾收集器在未定义的时间运行,因此不能用来关闭文件、释放网络连接等。(因此有IDisposable和“using”关键字)
在Swift编程中如何处理这个问题?
Swift似乎使用了与启用ARC的Objective-C相同的内存管理模型。
这意味着没有垃圾回收器。相反,当(strong)引用被设置时,ARC使用编译器插入的增量和减量操作来进行引用计数。
没有(线程化的)收集器意味着在Swift中完成最后处理是确定性的。对象在最后一个引用超出范围时被释放。
Swift和Objective-C一样启用了ARC。您可以在苹果文档中找到相关参考。
除了NikolaiRuhe提到的Swift默认处理外,你还可以使用deinit()
方法来强制释放对象。如果你已经实现了任何observers
,你可以使用这个方法来移除它们。