在 Swift 中,完成后我应该将可选实例变量设置为 nil 吗?

2023-12-30

我在我的一个应用程序中使用了大量音频、视频和图像,并且似乎遇到了轻微的内存问题,并且想知道释放内存的最佳方法是什么。

我使用了很多这样的可选变量:

var myImageView: UIImageView?

我想知道一旦您知道不再需要它来释放内存,是否将它们设置为 nil 是否被认为是最佳实践:

myImageView = nil

似乎将其设置为 nil 会删除最后一个强引用并导致它被释放,但如果可能的话,我也不想在代码中到处乱放 XXXX = nil 。

我还考虑过为使用此变量的类创建一个 deinit 方法,并在其中执行此操作,如下所示:

deinit {
    myImageView = nil
}

唯一的事情是我正在使用的实例在再次使用之前实际上并没有被销毁。但通常当一个实例被销毁时,它的所有选项也应该被释放,对吗?


来自苹果的文档 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html关于自动引用计数(ARC),他们说:

Swift 使用自动引用计数 (ARC) 来跟踪和管理应用程序的内存使用情况。在大多数情况下,这意味着内存管理在 Swift 中“正常工作”,您不需要自己考虑内存管理。当不再需要类实例时,ARC 会自动释放这些实例所使用的内存。

您似乎对以下部分感兴趣

然而,在某些情况下,ARC 需要有关 代码各部分之间的关​​系,以便管理内存 你。

你还没有发布任何代码,所以我不知道你是否有弱引用、无主引用、闭包的强引用循环等。

例如,如果您有一个强大的闭包引用循环,如上面的文档链接中所述:

当您使用类类型的属性时,Swift 提供了两种解决强引用循环的方法:弱引用和无主引用。

我认为阅读文档会对您有所帮助,因为它会让您清楚地了解 ARC 在 Swift 中的工作原理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Swift 中,完成后我应该将可选实例变量设置为 nil 吗? 的相关文章

随机推荐