加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:07:52 所属栏目:百科 来源:网络整理
导读:引用计数 引用计数是c/c++项目中一种古老的内存管理方式。当我8年前在研究一款名叫TCPMP的开源项目的时候,引用计数就已经有了。 在Cocos2d-x中克隆了一套CCAutoreleasePool。 CCAutoreleasePool 有两点需要注意: CCAutoreleasePool不能被开发者自己创建。C

引用计数

引用计数是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(…)这种类型的函数都有以上这些方式。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读