Unity中未被调用的Singleton(单例)是否会分配内存?
单例未被调用时是否会分配内存?
针对你给出的Unity MonoBehaviour单例代码,内存分配情况要分两种场景来看:
场景中没有挂载该脚本的GameObject
这种情况下,不管你有没有调用CameraShake.instance,都不会分配该类实例的内存。因为MonoBehaviour必须依附于GameObject才能存在,没有挂载对象的话,这个类只是一个代码定义,静态字段instance默认是null,也不会触发Awake方法。此时内存里只有类的元数据,不会有实例相关的内存占用。场景中存在挂载该脚本的GameObject
这种情况下,只要场景被Unity加载,就会自动初始化这个MonoBehaviour组件,调用Awake方法并将instance赋值为当前实例——哪怕你从来没有在任何代码里主动调用CameraShake.instance,实例的内存也已经被分配了。这是因为Unity的组件生命周期是由引擎自动管理的,只要挂载了脚本的GameObject被加载,组件就会完成初始化。
补充说明:如果是普通C#类的单例(不继承MonoBehaviour),未访问静态成员时CLR可能不会初始化类,也就不会分配实例内存,但Unity的MonoBehaviour遵循引擎自身的生命周期规则,和普通C#单例逻辑不同。
内容的提问来源于stack exchange,提问作者PixelGM
相关产品推荐
相关产品推荐

