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

对象放回对象池时候的注意点

1、声音播放缓冲池问题
在这里插入图片描述
这里的RuntimeStudioEventEmitter是class。
其中_emitter1是类的成员,他的本意是,将不用的emitter还回到池子里。
但是如果不是ref传递的,如下:

      public void Destroy()
    {
        DestroyEmitter(_emitter1);
        DestroyEmitter(_emitter2);
        DestroyEmitter(_emitter3);
        DestroyEmitter(_emitter4);
        DestroyEmitter(_emitter5);
        DestroyEmitter(_emitter6);
        DestroyEmitter(_emitter7);
        DestroyEmitter(_emitter8);
        DestroyEmitter(_emitter9);
        DestroyEmitter(_emitter10);

        eventName = "";

        cachedGo = null;
        cachedRigidBody = null;
        m_fmodID = 0;
    }
    public void DestroyEmitter(RuntimeStudioEventEmitter emitter) //此地方非引用传递,会导致传入的遍历未赋为null
    {
        if (emitter != null)
        {
            emitter.Stop();
            ReturnEmitter(emitter);
            emitter = null;
        }
    }

此时_emitter1到_emitter10,都依然指向的池子里中的对象。这就很危险,因为下次从池子再拿出来的赋值给另一个引用的之后,这样就会有两个地方同时使用这个对象,这个会导致老的声音,突然被停止了。所以,必须是引用传递。

2、特效播放的时候缓冲池问题
我的本意是特效创建一个全局的比如保存在XEntity中的m_moveSfx,再角色销毁的时候自己释放。但是由于特效内部代码的原因,它会在update中检测这个特效播放完毕,如果播放完毕了,会自动释放,放回池子中。
那么此时m_moveSfx并未赋值为null,它指向了池子中的对象。
所以归结为两点:
1.确保释放是真正释放,也就是放回池子中的对象,无任何外部对象引用它。问题1阐述了此问题,未真正释放,类成员依然持有。
2.谁申请,谁释放。问题2就阐述了此问题,角色播放的特效,被特效管理系统释放了。导致角色还持有。

相关文章:

  • Django基础
  • 图形学学习推荐网址
  • 一条不归路
  • Java8 特性
  • 线程优先级
  • Django之template操作
  • 串口通信Rs232和TTL
  • C++:堆与栈区别
  • mysql的操作
  • matlab 绘图设置 (全)
  • 红包的原理
  • mathtype 修改公式 章节号 和编号
  • 论文阅读:Factorized Recurrent Neural Architectures for Longer Range Dependence
  • 论文 :审稿意见
  • 吴伯凡-认知方法论-原始舒适区=0认知
  • 【剑指offer】让抽象问题具体化
  • 3.7、@ResponseBody 和 @RestController
  • Android框架之Volley
  • CAP 一致性协议及应用解析
  • Idea+maven+scala构建包并在spark on yarn 运行
  • javascript 哈希表
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • nginx 配置多 域名 + 多 https
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 翻译:Hystrix - How To Use
  • 给新手的新浪微博 SDK 集成教程【一】
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 使用docker-compose进行多节点部署
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #QT(智能家居界面-界面切换)
  • $GOPATH/go.mod exists but should not goland
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (笔试题)分解质因式
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (待修改)PyG安装步骤
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (四)汇编语言——简单程序
  • (新)网络工程师考点串讲与真题详解
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)我也是一只IT小小鸟
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .naturalWidth 和naturalHeight属性,
  • .net core Swagger 过滤部分Api
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET使用存储过程实现对数据库的增删改查
  • /bin、/sbin、/usr/bin、/usr/sbin