Cocos2d-x 内存管理——引用计数

本文介绍了Cocos2d-x中采用的引用计数内存管理方式,并详细解释了CCAutoreleasePool的工作原理及其使用限制。此外还讨论了如何正确使用release方法以及静态构造函数在对象创建过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用计数

引用计数是c/c++项目中一种古老的内存管理方式。当我8年前在研究一款名叫TCPMP的开源项目的时候,引用计数就已经有了。

在Cocos2d-x中克隆了一套CCAutoreleasePool。

CCAutoreleasePool

有两点需要注意:

  • CCAutoreleasePool不能被开发者自己创建。Cocos2d-x会为我们每一个游戏创建一个自动释放池实例对象,游戏开发者不能新建自动释放池,仅仅需要专注于release/retain cocos2d::CCObject的对象。

  • CCAutoreleasePool不能被用在多线程中,所以假如你游戏需要网络线程,请仅仅在网络线程中接收数据,改变状态标志,不要这个线程里面调用cocos2d接口。

只有两种情况你需要调用release()方法:

  • 你new一个cocos2d::CCObject子类的对象,例如CCSprite,CCLayer等。

  • 你得到cocos2d::CCObject子类对象的指针,然后在你的代码中调用过retain方法。

使用静态构造函数

CCSprite::create(“player.png”)是一个使用静态构造函数的例子。所以在Cocos2d-x中所有的类,除了单例,都提供了静态构造函数,这些静态构造函数包含下面4项操作:

  1. 新建一个对象
  2. 调用object->init(…)
  3. 假如初始化成功,例如,成功的找到纹理文件,那么接下来将会调用object->autorelease()。
  4. 返回这个已经被标记了autorelease的对象。

所有CCAsdf::createWithXxxx(…)这种类型的函数都有以上这些方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值