Swift中全局声明的静态类及类型的创建、释放时机是什么?
Swift 全局静态类创建与释放规则说明
你给出的代码示例如下:
class SomeStaticClass { static var someString = "someValue" }
你对静态属性懒加载、不会释放的推测符合实际规则,具体的生命周期细节如下:
1. 类本身的生命周期
全局声明的类的类型元数据会在程序启动初期的类加载阶段完成注册,这部分数据存储在程序的静态内存区域,从加载完成后就一直存在,直到整个程序进程终止才会被系统回收,全程不会被 runtime 主动释放。
2. 静态存储属性的生命周期
static var修饰的静态存储属性遵循以下规则:
- 默认是懒加载初始化,只会在这个属性被第一次访问时才会执行赋值操作。如果你全程没有访问过
SomeStaticClass.someString,这个属性永远不会被初始化,也不会占用对应的内存 - 一旦初始化完成,这个属性就会常驻静态内存区,整个程序生命周期内都不会被释放,哪怕后续没有任何地方引用这个类或者这个属性,也不会触发回收
- 静态属性的初始化过程默认是线程安全的,无需额外加锁就能保证全局只会初始化一次
3. 注意事项
不要把类本身的加载和静态属性的初始化混为一谈:类的类型元数据加载不代表静态属性会立刻初始化,只有静态属性被主动访问时才会触发对应的初始化逻辑。
内容的提问来源于stack exchange,提问作者froggomad
相关产品推荐
相关产品推荐

