- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Cocos2d-x 的CCObject与autorelease
Cocos2d-x 的CCObject与autorelease
另:本章所用Cocos2d-x版本为:
cocos2d-2.0-x-2.0.2 @ Aug 30 2012
/download
? ? ? ?
? ? ? ? ? ? ? ??
? ? 在上一节“Cocos2d-x 2.0 TestCpp框架源码分析”中,我们深入分析了TestController类的实现。其中我们曾经遇到这两句代码:
? ? //新创建一个TestController对象
??? CCLayer* pLayer = newTestController();
??? //将它交由内存管理器进行内存释放管理
??? pLayer-autorelease();
? ? 在创建了一个TestController实例对象后,对它调用了autorelease函数。这个该怎么理解这一句的含义呢?我们先来看一下基类CCObject是怎么定义的。
?
读前小提示:CCScriptEngineManager是脚本引擎管理器,它对于使用的脚本引擎进行管理。说起脚本引擎,首先要了解什么是脚本?脚本是使用特定的语言格式来编写的描述一定逻辑功能的文本文件,它可以实现在文本文件中通过访问特定格式的函数对系统逻辑进行编程。这个文本文件不被编译进可执行程序中,而是动态的在需要的时候通过系统对这个文本文件的解释来执行。脚本引擎则可以理解为对脚本的使用管理进行封装的相关的类和接口函数。游戏中常用的脚本有Lua和Python。目前Cocos2d-x集成了Lua的脚本引擎模块,使用非常方便。后面的Lua章节我们进行详细讲解。
读前小提示:引用计数器是一种内存管理方式。通过一个无符号的成员变量计算当前有多少使用者在使用本内存。每次外部对象使用本内存时计数器加1,使用完要释放本内存时计数器减1,当计数器减为0时才真正进行占用内存释放。这样做可以实现在多个使用者使用一块内存时,只有当所有的使用者都确定不再使用这块内存的时候才进行内存的释放。避免了在还有使用者在使用内存时提前释放内存而导致的程序崩溃。
重点函数:release()
CCObject.h:
[cpp]?view plaincopy
#ifndef?__CCOBJECT_H__??
#define?__CCOBJECT_H__??
??
#include?platform/CCPlatformMacros.h??
//Cocos2d命名空间??
NS_CC_BEGIN??
??
//声明以下几种类,在后面会定义相应类的成员变量的指针。以下几个类均是CCObject类的派生类。??
class?CCZone;??//CCObject指针暂存类??
class?CCObject;//基类??
class?CCNode;??//结点类??
class?CCEvent;?//事件类??
??
//这里定义了一个拷贝类??
class?CC_DLL?CCCopying??
{??
public:??
????//虚函数。功能是为CCZone指针所指向的对象复制一份新的CCObject对象指针??
????virtual?CCObject*?copyWithZone(CCZone*?pZone);??
};??
//由CCCopying派生出CCObject??
class?CC_DLL?CCObject?:?public?CCCopying??
{??
public:??
????//?唯一ID??
????unsigned?int????????m_uID;??
????//?在LUA脚本引擎中的访问标识ID.暂可不理会,待学习到LUA时再分析??
????int?????????????????m_nLuaID;??
protected:??
????//?引用计数器,进行内存计数。??
????unsigned?int????????m_uReference;??
????//?是否是被内存管理器进行托管而自动进行释放。??
????bool????????????????m_bManaged;???????
public:??
????//构造函数??
????CCObject(void);??
????//析构函数??
????virtual?~CCObject(void);??
????//释放??
????void?release(void);??
????//保留??
????void?retain(void);??
????//设置实例对象的释放由内存管理器进行管理。实现自动释放。??
????CCObject*?autorelease(void);??
????//取得一个拷贝??
CCObject*?copy(v
文档评论(0)