cocos2d-x 内存管理理解 总结
2013-04-21 17:34
267 查看
本文将主要进行对现在流行的cocos2d-x引擎的内存管理机制,进行一些总结,由于是刚刚接触cocos2d,并且本文是自己的整个cocos2d内存管理的自我的理解,难免有错,请各位看官斧正或交流,一起提高。
本文将不在进行跟踪源码了,因为网上已经有很多相关的分析,比如Cocos2d-x内存管理都是不错的讲解。
我将通过下面三个过程,进行说明我的理解
对象新建和调用autorelease()的对象内部变化
而后是当我们调用autorelease后,系统在背地里做了什么
我对于使用autorelease(),restain()的使用方式的理解
加1.
release():这个函数很简单,就是首先判定对象的m_reference是否为1,如果为1,那么将其delete掉。
autorelease()的使用情况,就是在我们创建了一个对象,对于这个对象我们不需要知道它什么时候消亡,因为我在其他地方都不会使用它(所以我觉得,如果已经知道以后不会再使用它了,直接进行release就行了,但是系统给我们提供了,这个方法,不要我们去手动的调用release函数)
retain():对于这个函数就只有在,我们创建完之后调用了autorelease函数才有。通过autorelease函数我们知道,当Director在main_loop中清空所有autoreleasePool中加入的对象的时候,调用的release函数,所以当我们函数m_referce==1,则该对象会被delete掉。那么我们要怎样避免对象被系统,悄悄的释放掉。我们就要显示的修改m_reference让它们大于1。这样系统执行autoreleasePool清空的时候,只是将release--;
因为我也是刚刚接触有什么错误的确实不能避免,希望给我能够给我指出,共同学习进步啊,谢谢
本文将不在进行跟踪源码了,因为网上已经有很多相关的分析,比如Cocos2d-x内存管理都是不错的讲解。
我将通过下面三个过程,进行说明我的理解
对象新建和调用autorelease()的对象内部变化
而后是当我们调用autorelease后,系统在背地里做了什么
我对于使用autorelease(),restain()的使用方式的理解
一:调用autorelease()函数
一般我们调用autorelease的情况都是CCSprite * p = new CCSprite(); p->autorelease();是不?上面这段代码第一句代码干了什么的干活?首先是通过新建对象CCSprite,父类CCObject的初始化将该对象的m_reference赋值为1。而后调用autorelease()函数就会将这个对象加入到AutoReleasePool这个数组中存放起来,并且将CCSprite的m_autoreleasecount(自动释放次数)
加1.
二:系统鬼鬼祟祟做什么?
当我们调用了autorelease()函数之后,系统背地里帮我干了什么?其实当你看过源码之后,你会知道在Director类中的主循环函数main_loop().函数中有一句话// release the objects CCPoolManager::sharedPoolManager()->pop();表示在每执行一帧之后,Director都会将AutoReleasePool的数据清空,让pool中的元素调用release方法。这样就将我们不需要的元素给释放掉了。
三:对于使用autorelease(), retain(), release()函数使用情况的理解
对于这个的理解,我觉的:release():这个函数很简单,就是首先判定对象的m_reference是否为1,如果为1,那么将其delete掉。
autorelease()的使用情况,就是在我们创建了一个对象,对于这个对象我们不需要知道它什么时候消亡,因为我在其他地方都不会使用它(所以我觉得,如果已经知道以后不会再使用它了,直接进行release就行了,但是系统给我们提供了,这个方法,不要我们去手动的调用release函数)
retain():对于这个函数就只有在,我们创建完之后调用了autorelease函数才有。通过autorelease函数我们知道,当Director在main_loop中清空所有autoreleasePool中加入的对象的时候,调用的release函数,所以当我们函数m_referce==1,则该对象会被delete掉。那么我们要怎样避免对象被系统,悄悄的释放掉。我们就要显示的修改m_reference让它们大于1。这样系统执行autoreleasePool清空的时候,只是将release--;
因为我也是刚刚接触有什么错误的确实不能避免,希望给我能够给我指出,共同学习进步啊,谢谢
相关文章推荐
- 对iOS开发中内存管理的一点总结与理解
- 【cocos2d-x 3.x 学习与应用总结】4: 理解CC_CALLBACK_0, CC_CALLBACK_1, CC_CALLBACK_2, CC_CALLBACK_3
- 深入理解 Cocos2d-x 内存管理 转
- 深入理解 Cocos2d-x 内存管理
- 【cocos2d-x 2.x 学习与应用总结】11: 理解CCGLProgram
- cocos2d内存管理的一些学习总结
- cocos2d-x内存管理的概括理解
- 深入理解 Cocos2d-x 内存管理
- 对iOS开发中内存管理的一点总结与理解
- 【cocos2d-x 3.x 学习与应用总结】4: 理解CC_CALLBACK_0, CC_CALLBACK_1, CC_CALLBACK_2, CC_CALLBACK_3
- 对cocos2d内存管理的一些理解
- 深入理解 Cocos2d-x 内存管理
- Cocos2d-x的内存管理总结
- [转载]对iOS开发中内存管理的一点总结与理解
- 深入理解 Cocos2d-x 内存管理
- Cocos2d-x的内存管理总结
- Linux理解-内存管理 学习总结
- 深入理解 Cocos2d-x 内存管理
- 关于map中内存管理的一些理解
- JAVA多线程的总结和代理模式理解