当前位置: 首页 > article >正文

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

先看代码:


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通常只会在需要时加载类,以避免不必要的内存和资源消耗。

 

如下情况会被加载: 

public class BKMusic : MonoBehaviour
{

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

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

 


http://www.kler.cn/a/372177.html

相关文章:

  • Linux export命令
  • 贪心算法求解跳跃游戏
  • 京东大数据治理探索与实践 | 京东零售技术实践
  • 用python ollama qwen2.5 开发一个AI修仙游戏
  • ElasticPDF-新国产 PDF 编辑器开发框架(基于 pdf.js Web PDF批注开发,实现高亮多边形橡皮擦历史记录保存注释文字)
  • [Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
  • 力姆泰克伺服电动缸的优势有哪些
  • ML2021Spring-hw1(COVID-19 Cases Prediction)
  • 百度SEO分析实用指南 提升网站搜索排名的有效策略
  • unity游戏开发之赛车游戏
  • WEBRTC教程:局域网怎么调试,http://172.19.18.101:8080 ,无法访问摄像头和麦克风,请检查权限
  • 【数据库知识】oracle进阶-逻辑结构深入理解
  • 「Mac畅玩鸿蒙与硬件8」鸿蒙开发环境配置篇8 - 应用依赖与资源管理
  • QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新
  • [LeetCode-455]基于贪心算法的分发饼干问题的求解(C语言版)
  • Jenkins 发布 Java 项目:高效持续集成与部署
  • 2024年优秀的天气预测API
  • 微短剧小程序搭建:探索数字叙事新领域
  • 倒计时demo
  • EXPLAIN 针对性优化 SQL 查询
  • 【TS】TypeScript 类型定义之联合类型(union types)和交叉类型(intersection types)
  • Git_码云
  • RabbitMQ如何防止消息丢失及重复消费
  • C++中封装红黑树模拟实现map和set
  • echarts横向左右对比柱状图,两种展示方式(对向、反向)
  • 【大数据学习 | kafka】kafuka的基础架构