swift - ARC 不适用于 struct 和 enum,它们是如何在 Swift 中释放的
问题描述
由于 ARC 不适用于 struct 和 enum,那么它们是如何从内存中释放的呢?当它在采访中被问到并试图找到正确的答案时,我不得不陷入困境,但在谷歌上找不到太多关于它的信息。我知道 swift 在处理值类型方面很聪明。但是怎么做?
解决方案
对象(类的实例)的内存管理相对困难,因为对象的寿命可能比函数调用、其他对象的寿命、甚至分配它们的线程的寿命更长。它们是堆上的独立实体,需要记账以确保在不需要它们时释放它们(一旦不再从任何其他线程/对象引用它们,它们就无法访问,因此不能可能需要,所以可以安全删除)。
另一方面,结构和枚举只是将它们的实例内联存储。如果它们被声明为局部变量,它们将分配在堆栈上(或在寄存器中,但不要介意)。如果它们被分配为另一个对象的属性,它们只是直接内联存储在该对象中。它们只会因为它们的包含上下文被释放而被删除,例如当函数返回时,或者当对象被释放时。
推荐阅读
- python - “验证交易:失败”更新 anaconda 表单时出错 anaconda 提示
- javascript - 如何在 Redis 中存储大型多维数组?
- python - Python + OpenGL + FreeType .. 中文字符不起作用
- python - 为什么 Python 中会出现错误:SyntaxError: f-string: mismatched '(', '{', or '[' in a block of code?
- android - 在 RecyclerView 中未正确解析暗模式颜色
- google-sheets - Google 表格 - 动态更改单元格引用
- python - 正则表达式从匹配的下一个字符开始
- c# - 需要获取从 AutoCAD Civil3D 中的类创建的对象的计数
- notepad++ - 记事本++多个数字和字符交换
- excel - 使用一个切片器更改 Excel 表和数据透视表数据