cocos2d-x の仕組みのメモ

リファレンスカウンタ (参照カウンタ)

リファレンスカウンタとは、cocos2d-xで採用されているメモリ管理方式のこと。

ほぼすべてのオブジェクトの基底クラスにRefクラスが定義されている。

この方式を簡単に言えば、

  • 参照されるごとにカウンタをインクリメント (retain)
  • 参照がなくなるごとにデクリメント (release)
  • カウンタが0になればオブジェクトが削除される

というもの。

これを初めて聞いた時、inodeに似てるなあと思った。はい。

Refクラスのメソッド

メソッド 概要
retain() カウンタをインクリメント
release() カウンタをデクリメント
getReferenceCount() カウンタの値を取得
autorelease() main終了時に自動的に削除

コンビニエンスコンストラクタ

cocos2d-xの仕様上、newができない。

auto node = new cocos2d-x::Node();
// これダメ

その代わりに、createメソッドを使う

auto node = cocos2d-x::Node::create();
auto sprite = cocos2d-x::Sprite::create("test.png");
auto label = cocos2d-x::Label::createWithSystemFont("Hello!!", "Helvetica",  16);

コンビニエンスコンストラクタから生成したオブジェクトは自動的にautorelease状態になっている。

消すの忘れそうなオブジェクトはデストラクタでリファレンスカウンタを0にさせる。

MyClass::~MyClass()
{
     CC_SAFE_RELEASE_NULL(_instanceMember);
// 引数に渡した変数がNULLでなければ、releaseメソッドを呼び出して変数にNULLをぶちこむマクロ
}