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

引用计数

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

你可能感兴趣的:(1.,Cocos2d-x)