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

思考一个问题: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函数

 图片

图片

 图片
 图片
 图片


 图片
图片 
图片 图片
图片 
图片 
图片 
图片 
图片 图片
图片 
图片 
图片 
图片 
图片 
图片 
图片 
图片 图片
图片 
图片 
图片 
图片 
图片 图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值