私はcocos2d-xのドキュメントを探していましたが、基本を超えて本当に貧弱なようです。私自身のクラスは(元々はカカオの) /メカニズムCCObject
を使用できるようにするために継承する必要があることを理解していますが、あなたが何かをしたときに何が起こるかについてはまだ混乱しています。自動的には呼び出されません。コンストラクター内から呼び出しても大丈夫ですか?それだけで、私のオブジェクトが参照カウント1で始まることが保証されますか?何をいつ使うべきですか?ココアとまったく同じように動作しますか?どうですか?適切にコーディングされたクラスの例(およびインスタンス化/破棄)を見て、メモリリークを台無しにして残さないようにするために何をすべきかを理解する必要があります。ありがとうございました。retain
release
new
init
CC_SAFE_DELETE
release
autorelease
CC_SYNTHESIZE
3276 次
2 に答える
4
CCObjectクラスのコードを見ると、コンストラクターで参照カウントが1に設定されていることがわかります。したがって、によるオブジェクトの作成new
は正しいです。CCObjectクラスにはそのようなメソッドがないため、Initは呼び出されません。通常、静的コンストラクターを使用してオブジェクトを作成することを好みます。のようなSmth
MyClass* MyClass::createInstance()
{
MyClass* object = new MyClass();
// you can create virtual init method
// and call it here
if( initWasSuccessful )
{
object->autorelease();
}
else
{
CC_SAFE_RELEASE_NULL(object);
}
return object;
}
CC_SAFE_DELETEのようなすべてのマクロについて-cocos2dxのコードで見つけることができます。このマクロは、オブジェクトがNULLかどうかをチェックするだけで、releaseメソッドを呼び出そうとしたときにクラッシュするのを防ぎます。
于 2012-05-24T05:43:35.203 に答える
1
モリオンによって提供された答えは素晴らしいです、私はこの問題についていくつかの有用なリンクを追加したいと思います。
ここでは、Cocos2d-xページの公式メモリ管理を見つけることができます:Cocos2d-xの メモリ管理
このフォーラムページには、Cocos2d-xでのメモリの割り当て解除に関する詳細と説明も含まれています。
コーディングをお楽しみください!
于 2012-11-19T13:44:50.923 に答える