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をぶちこむマクロ
}