cocos2d-x内存管理机制详解
2014-10-10 09:32
309 查看
本篇文章纯粹是自己在写木头的卡牌塔防的时候遇到问题的时候,才萌发心思了解关于cocos2d-x的内存管理机制;
1.首先要想让对象参与内存管理机制,必须要继承Ref类(Node,Layer,等都继承了该类);
2.调用对象的autoRelease函数,对象就会被cocos2d-x内存管理机制给盯上,并且是在游戏的每一帧都被盯上,没人认领则将其杀死;
3.如果不想其被杀死,则就要调用retain函数,这样就被认领了,这样就永远不会被杀死,问题来了,如果永远不被杀死,则就要造成了内存泄露,则需要调用release函数
4.addChild函数会调用retain函数。
问题来了:
什么时候调用retain函数?什么时候调用release函数?
解释:
当你把一个对象作为成员变量时,并且没有把对象的addChild到另外一个对象中,就需要调用retain函数。
切记,必须调用了该对象的autoRelease函数之后,才可以使用release和retain;
关于内存管理总结起来有4 个原则。
1.谁创建,谁释放。使用 new 构造出来的函数引用计数为 1,需要调用 release 或者delete 释放,Cocos2D-X 中封装的create 函数中的步骤是先调用new 构造出来一个对象,因为要符合“谁创建,谁释放”的原则,而create 函数需要返回这个对象,不能 自己释放自己创建的对象,所以要调用autorelease 将对象放入自动释放池。也就是说create 出来的对象,如果不调用retain 函数,那么下一帧(再次调用update
时)这个对象已经被自动释放。
2. 谁需要保留谁释放。当一个对象被其他指针需要的时候该指针进行保留操作(retain),当不需要时进行release 释放。需要注意的是,addChild 中已经调用了retain 函数,所以创建的Node 节点,不需要retain,直接传递给addChild 被加在父节点上就可以保留了。
3.传递赋值时,需要先 retain 形参,后 release 原指针,最后赋值。
4.自动释放池 PoolManager。将对象置于自动释放池中,每帧绘制结束,就自动释放池中的对象。
1.首先要想让对象参与内存管理机制,必须要继承Ref类(Node,Layer,等都继承了该类);
2.调用对象的autoRelease函数,对象就会被cocos2d-x内存管理机制给盯上,并且是在游戏的每一帧都被盯上,没人认领则将其杀死;
3.如果不想其被杀死,则就要调用retain函数,这样就被认领了,这样就永远不会被杀死,问题来了,如果永远不被杀死,则就要造成了内存泄露,则需要调用release函数
4.addChild函数会调用retain函数。
问题来了:
什么时候调用retain函数?什么时候调用release函数?
解释:
当你把一个对象作为成员变量时,并且没有把对象的addChild到另外一个对象中,就需要调用retain函数。
切记,必须调用了该对象的autoRelease函数之后,才可以使用release和retain;
关于内存管理总结起来有4 个原则。
1.谁创建,谁释放。使用 new 构造出来的函数引用计数为 1,需要调用 release 或者delete 释放,Cocos2D-X 中封装的create 函数中的步骤是先调用new 构造出来一个对象,因为要符合“谁创建,谁释放”的原则,而create 函数需要返回这个对象,不能 自己释放自己创建的对象,所以要调用autorelease 将对象放入自动释放池。也就是说create 出来的对象,如果不调用retain 函数,那么下一帧(再次调用update
时)这个对象已经被自动释放。
2. 谁需要保留谁释放。当一个对象被其他指针需要的时候该指针进行保留操作(retain),当不需要时进行release 释放。需要注意的是,addChild 中已经调用了retain 函数,所以创建的Node 节点,不需要retain,直接传递给addChild 被加在父节点上就可以保留了。
3.传递赋值时,需要先 retain 形参,后 release 原指针,最后赋值。
4.自动释放池 PoolManager。将对象置于自动释放池中,每帧绘制结束,就自动释放池中的对象。
相关文章推荐
- Android内存管理机制详解
- cocos2d-x内存管理机制
- Cocos2d-x内存管理机制
- Android内存管理机制详解
- Android内存管理机制详解
- Android内存管理机制详解
- cocos2d-x内存管理机制之autorelease()
- Cocos2d-X研究之v3.x 事件分发机制详解
- Cocos2d-x的内存管理机制概述
- memcached内存管理机制详解
- Android内存管理机制详解
- 1、Cocos2d-x读书笔记( 基础讲解,以及内存管理机制)
- [置顶] 【玩转cocos2d-x之二十】从CCObject看cocos2d-x的内存管理机制
- 详解JVM的内存管理机制
- 从CCObject看cocos2d-x的内存管理机制
- cocos2d 内存管理机制详解
- 【玩转cocos2d-x之二十】从CCObject看cocos2d-x的内存管理机制
- 从CCObject看cocos2d-x的内存管理机制
- 深入详解python传值问题及内存管理机制
- cocos2d-x的内存管理机制release(),retain(),autorelease()