【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十三课:Cocos2D-X内存管理4-6

【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十三课:Cocos2D-X内存管理4-6,第1张

概述【麦可网】Cocos2d-X跨平台游戏开发---学习笔记 第十三课:Cocos2D-X内存管理4-6 =====================================================================================================================================================

【麦可网】Cocos2d-X跨平台游戏开发---学习笔记

第十三课:Cocos2D-X内存管理4-6

=======================================================================================================================================================================

课程目标:

-Cocos2D-X内存管理机制

课程重点:

-C\C++内存管理机制

-引用计数内存管理机制

-自动释放机制

考核目标

-理解引用计数内存管理机制

-合理运用自动释放机制

=======================================================================================================================================================================

一、自动释放池
CCPoolManagersprite->autorelease();例:CCSprite* pSprite = CCSprite::spriteWithfile("HelloWorld.png");<span >					</span>//自动释放池this->addChild(pSprite,0);
其中:CCSprite* CCSprite::spriteWithfile(const char *pszfilename){    CCSprite *pobSprite = new CCSprite();    if (pobSprite && pobSprite->initWithfile(pszfilename))    {        pobSprite->autorelease();								//自动释放机制        return pobSprite;    }    CC_SAFE_DELETE(pobSprite);	return NulL;}


二、静态工厂方法
static CCSprite *spriteWithTexture(CCTexture2D *pTexture);static CCSprite *spriteWithTexture(CCTexture2D *pTexture,const CCRect &rect);static CCSprite *spriteWithTexture(CCTexture2D *pTexture,const CCRect &rect,const CCPoint &offset);static CCSprite *spriteWithSpriteFrame(CCSpriteframe *pSpriteFrame);static CCSprite *spriteWithSpriteFrame(const char *pszSpriteFramename);static CCSprite *spriteWithfile(const char *pszfilename);static CCSprite *spriteWithfile(const char *pszfilename,const CCRect &rect);static CCsprite *spriteWithBatchNode(CCSpriteBatchNode *batchNode,const CCRect &rect);------------------------------------------------Cocos2D-X里new和release配对才能发挥引用计数的功能。CCSprite *sprite = new CCSprite();sprite->release();以init开头的都没有自动释放,如:initWithcolorWIDthHeight以名称(如layer\sprite)开头的都有自动释放,如:layerwithcolor


三、Cocos2D-X里用宏实现私有成员getset
用宏来对私有成员实现get和set,以减少工作量使用前需包含:头文件“cocos2d.h”和命名空间USING_NS_CC;#define CC_SYNTHESIZE(varType,varname,funname)\protected: varType varname;\public: virtual varType get##funname(voID) const { return varname; }\public: virtual voID set##funname(varType var){ varname = var; }---------------------------------------------------指针型私有成员的setCC_SYNTHESIZE_RETAIN(CCSprite*,_Sprite,Sprite);#define CC_SYNTHESIZE_RETAIN(varType,funname)    \protected: varType varname; \public: virtual varType get##funname(voID) const { return varname; } \public: virtual voID set##funname(varType var)   \{ \    CC_SAFE_RETAIN(var); \					//引用计数加1    CC_SAFE_RELEASE(varname); \			<span >		</span>//防止内存泄漏,需先delete之前的    varname = var; } --------------------------------------------------------安全释放的宏:#define CC_SAFE_DELETE(p)			if(p) { delete (p); (p) = 0; }#define CC_SAFE_DELETE_ARRAY(p)  <span >	</span> <span >	</span>if(p) { delete[] (p); (p) = 0; }#define CC_SAFE_FREE(p)			<span >	</span>if(p) { free(p); (p) = 0; }#define CC_SAFE_RELEASE(p)		<span >	</span>if(p) { (p)->release(); }#define CC_SAFE_RELEASE_NulL(p)	<span >		</span>if(p) { (p)->release(); (p) = 0; }#define CC_SAFE_RETAIN(p)			if(p) { (p)->retain(); }#define CC_BREAK_IF(cond)			if(cond) break;

===================================================================

总结:

先从掌握静态工厂和安全释放宏开始,多用宏,安全又方便。

开心一刻:

四只老鼠吹牛:

甲:我每天都拿鼠药当糖吃;

乙:我一天不踩老鼠夹脚发痒;

丙:我每天不过几次大街不踏实;

丁:时间不早了,回家抱猫去咯。

【麦可网】Cocos2d-X跨平台游戏开发---教程下载:http://pan.baIDu.com/s/1kTio1Av

【麦可网】Cocos2d-X跨平台游戏开发---笔记系列:http://blog.csdn.net/qiulanzhu

总结

以上是内存溢出为你收集整理的【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十三课:Cocos2D-X内存管理4-6全部内容,希望文章能够帮你解决【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十三课:Cocos2D-X内存管理4-6所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存