Cocos2dx3.10引擎的底层及内存管理机制
来源:互联网 发布:mysql 锁表后能读吗 编辑:程序博客网 时间:2024/06/08 04:41
思考一个问题: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 : 增加计数
retain : 增加计数
release : 减少计数
autorelease : 将一个对象交给自动释放池AutoreleasePool进行管理,由AutoreleasePool负责调用release函数
阅读全文
0 0
- Cocos2dx3.10引擎的底层及内存管理机制
- Cocos2dx3.10引擎的底层及内存管理机制
- iOS内存管理机制及属性的使用
- Qt的内存管理机制
- s3c2440的内存管理机制
- addsubview 的内存管理机制
- Java的内存管理机制
- s3c2440的内存管理机制
- cocos2dx的内存管理机制
- Android的内存管理机制
- linux的内存管理机制
- linux的内存管理机制
- linux的内存管理机制
- cocos2dx的内存管理机制
- Ruby的内存管理机制。
- python的内存管理机制
- Linux的内存管理机制
- python的内存管理机制
- Git初识(二)
- 几行代码实现ofo首页小黄人眼睛加速感应转动
- [题解]bzoj4034 树上操作
- JS笔试题(3)【阿里巴巴】
- android中通过网络请求数据显示在Listview中,面对许多的item,如何给每个item设置点击事件以跳转到不同的activity
- Cocos2dx3.10引擎的底层及内存管理机制
- Python实现简单的API
- hdu3549 Flow Problem【最大流】
- Python :正则表达式匹配
- NotePad++快速删除行号的办法
- HTML
- 常见H5开发兼容问题
- Kettle中根据一个输入行派生出多个输出行
- oc嵌套JS+HTML 踩的坑~ iOS篇