1

Cocos2d(ARC)を使用しています。カスタム CCSprite クラスを使用しているゲームを作成しています

+(id)createMySprite
{
   return [[self alloc] initMy] ;
}

これは私の CCSprite Class です。どこにメモリを割り当てますか。ARC のため、autorelease を書くことができません。2 つの CCLayer クラスがあります。ファーストクラスでは、そのボタンをクリックするだけで再生ボタンがあり、画面を置き換えて2番目の画面を移動します。2 番目のクラスでは、多くのカスタム CCSprite クラスにフェッチします。1st CCLayer クラスに置き換えると、2nd クラスのメモリが解放されず、メモリが増え続けます。その後、20 ~ 30 MB のライブ メモリに到達するとクラッシュします。だから私は、これに関して助けが必要です。

割り当て

基本的に、ヘッダーは ARC 互換です。ソース コードは ARC をサポートしていません。したがって、ARC を有効にせずに Cocos2D を静的ライブラリとしてコンパイルし、コード内でそれにリンクして、Cocos2D 要素のクラスとカスタム サブクラスに ARC を安全に使用できるようにします。私が間違っている場合は修正してください。ただし、プロジェクトで ARC を使用しても問題はなく、ARC を使用し、retain および release メッセージを手動で配置しない CCSprite サブクラスを使用する必要があります。右?

4

1 に答える 1

0

これはかなり前から存在しており、おそらく解決したことはわかっていますが、これを読んでいてまだ答えを探している人のために、CCNodes と保持サイクルについての私の理解を次に示します。

基本的に、私はこれについてブログを書いており、保持された CCNodes を回避する設計パターンを持っています。ここにリンクがあります。http://www.rotategears.com/development/ccnode-arc-memory-management/

簡単に言えば、ノード ivar を作成し、参照の強さを指定しないと、強い参照が取得されます。次に、参照も保持するノードに子として追加すると、二重の保持が作成され、OS がそれを解放しようとしたときに問題が発生します。このコンテナーで保持カウントが 1 だけになるように、ivar は週である必要があります。そうは言っても、この弱い参照をivarに割り当てる方法に注意する必要があります。割り当てる前に参照カウント1が必要になるか、ivarがnilに設定されるためです。

于 2014-06-25T05:31:58.247 に答える