cocos2dxではたくさんのマクロが登録されて使えるみたいで、とても便利そうなんだけどぼくの頭のメモリー容量からして絶対すぐ忘れちゃうんで、ここにちょっとずつまとめていくことにします。
※現在進行形で勉強中なんで、ぼくが見つけた(使った)やつだけになります。
※いちいちブログで新規投稿とかやってると(記事数は稼げるけど)後で探すのが大変だから、この記事を編集しながら少しずつ付け足していきます(多分)。
※ぼくのメモをかねてるんで余計な言葉もたくさんはいってます。
※アルファベット順で並べていきます。
CC_SAFE_DELETE(ポインタ) 使いそう度:★★★ (13/08/06)
たくさん使っていくことになるのかもしれないけど、まだよくわかってないから★3つ。
名前のとおりセーフティーにdeleteしてくれる。
CC_SAFE_DELETE_ARRAY(配列ポインタ) 使いそう度:★★(13/08/06)
ぼくの推理が正しければCC_SAFE_DELETEの配列バージョン。うん、見りゃわかりますね。
CC_SAFE_RELEASE(CCObject*) 使いそう度:★★★★(14/01/20)
CC_SAFE_DELETEよりはこっちの方がずっと使うっぽい。
CCObjectがNULLでない場合はrelease()をしてくれます。
CC_SAFE_RELEASE_NULL(CCObject*) 使いそう度:★★★★★(14/01/20)
CC_SAFE_RELEASEをした後、そのメンバをNULLにしてくれる。
メンバ変数はデストラクタ時にはNULLにする方がいいらしいので、そうしとくと安心ですね。デストラクタにはこのマクロを使いまくりです。
CC_SYNTHESIZE(メンバ,名前,関数名)使いそう度:★★★★★(14/01/20)
使いまくります。
protectedメンバとそれを取り出すpublic関数、セットするpublic関数を自動生成してくれる。
//CC_SYNTHESIZE(hoge , m_hoge , Hoge); //↓以下のようになる protected: hoge m_hoge; public:virtual hoge getHoge(void) const { return m_hoge; } public:virtual void setHoge(hoge var){ m_hoge = var; }
使用上の注意としては、public:宣言される為private:やprotected:で宣言しなおさないと下のは全部publicになる。もうpublicにする予定の場所に書いておけばいいみたい。
似たようなのではメンバの参照をセット&返すCC_SYNTHESIZE_PASS_BY_REFがある。
あとCCObjectを安全にセットできるCC_SYNTHESIZE_RETAINがある。
これはsetFunc()した場合、
1)中で前まで所持してたものをrelease()し、続いて
2)新しくセットするものをretain()してくれる仕組みになってます。
CC_SYNTHESIZE_READONLY(メンバ,名前,関数名)使いそう度:★★★★★(13/08/06)
これも絶対ぼく使いまくる。protected メンバとそれを取り出すpublic関数を自動生成してくれる。
たとえばこんな感じ。
//CC_SYNTHESIZE_READONLY(hoge , m_hoge , Hoge); //↓以下のようになる protected: hoge m_hoge; public: virtual hoge getHoge(void) const { return m_hoge; }
これも使用上の注意としては、public:宣言される為private:やprotected:で宣言しなおさないと下のは全部publicになる。もうpublicにする予定の場所に書いておけばいいみたい。
似たようなのではメンバの参照を返すCC_SYNTHESIZE_READONLY_PASS_BY_REFがある。
CC_UNUSED_PARAM(引数) 使いそう度:★★(13/08/06)
cocos2dxの継承クラスでオーバーライドした関数の引数を中で使わないのであれば呼び出しとけばいいみたい(コンパイル時にwarningがでなくなる?)
CCLOG(書式,…) 使いそう度:★★★★★(14/01/20)
ログを吐き出してくれるデバッグには欠かせないマクロです。中身はCCLogを実行してるだけなんだけど、デバッグモードをOFFにするとログを吐き出さなくなるのでとても安全に使えます。
ちなみに、引数はprintfと同じ形式をとります。
CREATE_FUNC(クラス名) 使いそう度:★★★★★ (13/08/06)
(cocos2dで使うクラス).create();を定義&実装してくれるっぽい。
更にインスタンスが必要なくなったら自動でメモリ解放もしてくれるようになるみたい。
これをヘッダファイルに書いておけばcreate()の実装をかかなくてもよくなる。
このページはこのブログのメニュー「cocos2d-x」からもアクセスできるようにしとこ。
ピンバック: cocos2d-xのリファレンスカウンタを理解してクラッシュやメモリリークを防ぐ | たそがれブランチ
ピンバック: 【cocos2d-x】CC_SYNTHESIZE_RETAINでハマった件【C++】 | TRISTORE