加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2dx3.10引擎的底层及内存管理机制

发布时间:2020-12-14 17:03:28 所属栏目:百科 来源:网络整理
导读:思考一个问题:cocos2dx游戏引擎的内存管理机制,为什么不使用C++的Shared_ptr这个看似完美的内存管理方案,而是引擎自身去实现一套机制? 一、引擎启动 每个Cocos2d工程创建完,都会有AppDelegate/HelloWorldScene文件,AppDelegate是cocos2d引擎的入口类,

思考一个问题:cocos2dx游戏引擎的内存管理机制,为什么不使用C++的Shared_ptr这个看似完美的内存管理方案,而是引擎自身去实现一套机制?


一、引擎启动

每个Cocos2d工程创建完,都会有AppDelegate/HelloWorldScene文件,AppDelegate是cocos2d引擎的入口类,引擎启动时首先会去加载AppDelegate类

AppDelegate.h




二、引擎内存管理
Node的管理 : (继承关系,U3D是组成关系),整个引擎的管理关系是树形结构的节点
在Node中,有个指针容器成员m_pChildren,存放了当前节点下的所有子节点,可通过addChild()方法增加子节点,将所有子节点的指针都存放在当前节点的容器中,只需要纵向查询即可,不再需要横向查询了。
◆ 内存管理基本思想:引用计数,跟C++的share_ptr、weak_ptr是俩个概念,处理自动释放的原理具有相似性
通过计数的方式,实现多个不通的对象同时引用一个共享对象;
当创建一个对象的实例并在堆上分配内存时,对象的引用计数为1,(即new出来后,初始计数值是1);在其他对象中需要持有这个共享对象时,需要把共享对象的引用计数加1;当其他对象不再持有该共享对象时,共享对象的引用计数减1;当共享对象的引用计数变为0时,该共享对象的内存会被立即释放。
retain : 增加计数
release : 减少计数
autorelease : 将一个对象交给自动释放池AutoreleasePool进行管理,由AutoreleasePool负责调用release函数


























(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读