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

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

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

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

第十二课:Cocos2D-X内存管理1-3

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

课程目标:

-Cocos2D-X内存管理机制

课程重点:

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

-引用计数内存管理机制

-自动释放机制

考核目标

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

-合理运用自动释放机制

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

一、C\C++内存管理机制
new/delete(会执行构造和析构函数)GameObject *gameObject = new GameObject();gameObject->iCount = 0;Delete gameObject;GameObject *gameObject2 = new GameObject[5];delete[] gameObject2;
----------------------------------------------------------------------------malloc/free(不会执行构造函数和析构函数)GameObject *gameObject = (GameObject *)malloc(sizeof(GameObject));gameObject->iCount = 0;free(gameObject);


二、引用计数内存管理机制
引用计数内存管理机制是为了解决以下情况的问题:GameObject *gameObjet = new GameObject;GameObject *gameObject2 = gameObject;gameObject->iFlag = 1;delete gameObject;gameObject2->iFlag = 0;			//由于上一步中释放了内存,此步会报错误。  解决办法:GameObject *gameObjet = new GameObject;GameObject *gameObject2 = gameObject;gameObject->iCount += 1;gameObject->iFlag = 1;gameObject->myFree();gameObject2->iFlag = 0;gameObject2->myFree();其中:GameObject::GameObject(){iCount = 1;}GameObject::~GameObject(){}voID GameObject::myFree(){--iCount;if(iCount <= 0){delete this;}}


三、Cocos2D-X里的引用计数机制
sprite->retain();				//引用计数加1sprite->release();				//引用计数减1,判断是否释放资源sprite->retaincount();			<span >	</span>//返回引用计数的值set\get;CCObject::CCObject(voID)		        //节点里的构造函数将引用计数设置为1{	static unsigned int uObjectCount = 0;    m_uID = ++uObjectCount;    m_nLuaID = 0;	// 当对象创建时,引用计数设置为1	m_uReference = 1;	m_bManaged = false;}例:CCSprite *sprite = new CCSprite();			//引用计数=1sprite->initWithfile(“HelloWorld.png”);CCSprite *sprite2 = sprite;sprite->retain();				<span >	</span>//引用计数=2sprite->release();			<span >	</span>	//引用计数=1sprite2->release();
--------------------------------------------------例:CCSprite *sprite = new CCSprite();			//引用计数=1sprite->initWithfile(“HelloWorld.png”);this->addChild(sprite);					//引用计数=2this->removeChild(sprite,true);				//引用计数=1sprite->release;					//引用计数=?(被释放完了)


四、节点树里的引用计数
virtual voID addChild(CCNode *child);virtual voID addChild(CCNode *child,int zNode);virtual voID addChild(CCNode *child,int zOrder,int tag);virtual voID removeChild(CCNode *child,bool cleanup);voID removechildByTag(int tag,bool cleanup);virtual voID removeAllChildrenWithCleanup(bool cleanup);

添加的时候,引用计数会加1

移除的时候,引用计数会减1


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

总结:

引用技术内存管理机制,在保持new后紧跟delete的风格的同时,解决了资源正确释放。


开心一刻:

清明节快到了,某人去买祭品,看到居然有纸糊的苹果手机,有些不以为然:啊哈,烧苹果手机,老祖宗会用吗?店老板白了他一眼说:乔布斯都亲自下去教了,你还 *** 那心?张三觉得有道理,便也买了一个。老板提醒:买个充电器吧!小心回来问你要,回来要是小事,叫你送过去就麻烦了!

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

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

总结

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

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存