首页 > 解决方案 > ARC 不适用于 struct 和 enum,它们是如何在 Swift 中释放的

问题描述

由于 ARC 不适用于 struct 和 enum,那么它们是如何从内存中释放的呢?当它在采访中被问到并试图找到正确的答案时,我不得不陷入困境,但在谷歌上找不到太多关于它的信息。我知道 swift 在处理值类型方面很聪明。但是怎么做?

标签: swiftmemory-managementstructureautomatic-ref-countingvalue-type

解决方案


对象(类的实例)的内存管理相对困难,因为对象的寿命可能比函数调用、其他对象的寿命、甚至分配它们的线程的寿命更长。它们是堆上的独立实体,需要记账以确保在不需要它们时释放它们(一旦不再从任何其他线程/对象引用它们,它们就无法访问,因此不能可能需要,所以可以安全删除)。

另一方面,结构和枚举只是将它们的实例内联存储。如果它们被声明为局部变量,它们将分配在堆栈上(或在寄存器中,但不要介意)。如果它们被分配为另一个对象的属性,它们只是直接内联存储在该对象中。它们只会因为它们的包含上下文被释放而被删除,例如当函数返回时,或者当对象被释放时。


推荐阅读