学习4-Cocos2D-X内存管理系统

学习4-Cocos2D-X内存管理系统,第1张

概述对Cocos2D-X内存管理系统的学习主要是从以下三个方面: 1.C/C++内存管理机制 2.引用计数机制 3.自动释放池 一、C/C++内存管理机制 C语言中对内存的管理是由malloc分配,free来释放。 C++中对内存的管理是有new分配,delete释放、new[]/delete[]。 以谁污染谁治理的原则。 ps: 函数调用结束、对象释放时先调用析构函数,而析构函数中通常负责释放。 了

对Cocos2D-X内存管理系统的学习主要是从以下三个方面:

1.C/C++内存管理机制

2.引用计数机制

3.自动释放池


一、C/C++内存管理机制 C语言中对内存的管理是由malloc分配,free来释放。 C++中对内存的管理是有new分配,delete释放、new[]/delete[]。 以谁污染谁治理的原则。 ps: 函数调用结束、对象释放时先调用析构函数,而析构函数中通常负责释放。 了解更多的内存分配与释放 请点击
二、引用计数机制 由于经常在代码中会出现内存分配了但是没有释放而造成内存泄漏的问题,所以,cocos2dx有一套引用计数机制,来帮助管理内存。

引用计数机制:在new对象的时候,在对象的构造函数中初始化一个iCount=1来记录该对象被引用的次数,retain对iCount++,release释放的时候先iCount--再判断iCount是否为0,当iCount为0的时候才进行安全释放。 sprite->retain();//count++
sprite->release();//count--
sprite->retainCount();//count
节点树
virtual voID addChild(CCNode* child);
virtual voID addChild(CCNode* child,int zOrder);
virtual voID addChild(CCNode* child,int zOrder,int tag); //都会调用retain()
virtual voID removeChild(CCNode* child,boolean cleanup);
voID removeChildByTag(int tag,bool cleanup);
virtual voID removeAllChildrenWithCleanup(bool cleanup); //调用ccArrayRemoveAllObjects 一个个的release掉 三、自动释放池 前面看到,只有当new 或者 malloc的时候我们才要去管内存。 可是在应用程序中,我们用到的节点都没有去new,所以,这里的全都是由自动释放池去管理了。 自动释放池: CCPollManager
sprite->autorelease();
更详细的说明请参考 这里。 总结

以上是内存溢出为你收集整理的学习4-Cocos2D-X内存管理系统全部内容,希望文章能够帮你解决学习4-Cocos2D-X内存管理系统所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存