ARC 不适用于结构和枚举,它们如何在 Swift 中释放
ARC doesn't apply to struct and enum, how are they deallocated in Swift
既然ARC不适用于struct和enum,那么它们是如何从内存中释放的呢?当它在采访中被问到并试图找到正确的答案时,我不得不陷入困境,但在谷歌搜索中找不到太多信息。我知道 swift 擅长处理值类型。但是怎么办?
对象(类的实例)的内存管理相对困难,因为对象的寿命可能超过函数调用、其他对象的寿命,甚至分配它们的线程的寿命。它们是堆上的独立实体,需要记账以确保它们在不需要时被释放(一旦它们不再被任何其他 threads/objects 引用,它们就无法访问,因此 不可能需要,所以删除是安全的)。
另一方面,结构和枚举只是将它们的实例内联存储。如果它们被声明为局部变量,则它们被分配在堆栈上(或在寄存器中,但不要介意)。如果它们作为另一个对象的 属性 分配,它们只是直接内联存储在该对象中。它们只有在释放包含上下文时才会被删除,例如当函数 returns 或对象被释放时。
既然ARC不适用于struct和enum,那么它们是如何从内存中释放的呢?当它在采访中被问到并试图找到正确的答案时,我不得不陷入困境,但在谷歌搜索中找不到太多信息。我知道 swift 擅长处理值类型。但是怎么办?
对象(类的实例)的内存管理相对困难,因为对象的寿命可能超过函数调用、其他对象的寿命,甚至分配它们的线程的寿命。它们是堆上的独立实体,需要记账以确保它们在不需要时被释放(一旦它们不再被任何其他 threads/objects 引用,它们就无法访问,因此 不可能需要,所以删除是安全的)。
另一方面,结构和枚举只是将它们的实例内联存储。如果它们被声明为局部变量,则它们被分配在堆栈上(或在寄存器中,但不要介意)。如果它们作为另一个对象的 属性 分配,它们只是直接内联存储在该对象中。它们只有在释放包含上下文时才会被删除,例如当函数 returns 或对象被释放时。