unity3d——单例模式,加载单例模式类问题

先看代码:

cs 复制代码
public class GameDataMgr 
{
    private static GameDataMgr instance = new GameDataMgr();
    public static GameDataMgr Instance { get => instance;}

    //构造函数
    private GameDataMgr()
    {
       
    }
}

如果该单例模式没用挂载到任何地方 那么他会在什么时候加载到内存中呢?

如果GameDataMgr类没有挂载在Unity编辑器中的任何一个GameObject上,并且没有被其他脚本直接引用,那么它的加载时机可能会变得不那么确定。然而,根据Unity的类加载机制和一般的编程实践,我们可以做出以下推断:

  1. 首次引用时加载
    • 最常见的情况是,当GameDataMgr类的静态成员(如Instance属性)首次被引用时,Unity会加载该类。这意味着只要代码中的任何部分尝试访问GameDataMgr.InstanceGameDataMgr类就会被加载到内存中。
  2. 程序初始化阶段
    • 在Unity程序初始化阶段,Unity会加载一系列必要的类和资源。虽然GameDataMgr类没有挂载在GameObject上,但如果它在项目的某个部分被引用(例如,在另一个脚本中通过GameDataMgr.Instance访问),那么它仍有可能在程序初始化阶段被加载。
  3. 动态加载
    • 如果GameDataMgr类是通过反射、动态加载或其他非直接引用的方式被加载的,那么它的加载时机将取决于这些动态加载代码的执行时机。然而,在大多数情况下,如果没有显式地编写动态加载代码,这种情况是不太可能发生的。
  4. 未使用则不被加载
    • 如果GameDataMgr类在项目的任何地方都没有被引用,那么根据Unity的类加载机制,它可能不会被加载到内存中。这是因为Unity通常只会在需要时加载类,以避免不必要的内存和资源消耗。

如下情况会被加载:

cs 复制代码
public class BKMusic : MonoBehaviour
{

    private void Awake()
    {
        ChangeValue(GameDataMgr.Instance.musicData.bkValue);
        ChangeOpen(GameDataMgr.Instance.musicData.isOpenBK);
    }
}

调用 GameDataMgr.Instance.xx GameDataMgr 类就被加载到程序内存中 也就是说 他会自动new 如何执行 private 中的构造函数

相关推荐
名字还没想好☜8 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
hez201010 小时前
.NET 11 Runtime Async 详解
c#·.net·.net core
一壶浊酒..11 小时前
Scrape Webpack练习
开发语言·javascript·webpack
命运之光11 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光12 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人12 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
圆奋奋13 小时前
FreeRTOS学习(三)- 任务调度模块
学习·开源·freertos
在世修行14 小时前
从零打造 C# 工业视觉检测系统(七):串口通信 SerialPort 封装与开发
开发语言·c#·modbus rtu·rs232/rs485
吃着火锅x唱着歌14 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习
Hammer_Hans14 小时前
DFT笔记98
java·开发语言·数据库