にリリース:のObjective-C:1つのスレッドでの割り当てと私は私のメインスレッドでこれをやっている
CCAnimation *anim; //class variable
[NSThread detachNewThreadSelector:@selector(loadAimation) toTarget:self withObject:nil];
loadAimationで:
-(void) loadAnimation {
NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
anim = [[CCAnimaton alloc] init];
[autoreleasepool drain];
}
を、メインスレッドで、私はそれを解放:
[anim release];
ここで、メモリ管理に関してこれが問題ではないかと尋ねたいと思います。
'loadAimation'は' loadAnimation'ですか?なぜ、 'anim'はプロパティではなくクラス変数ですか?リリースのコードは何ですか?オブジェクトの作成と破壊がバランス良く行われているかどうかを判断するのに十分な情報はありません。 – outis
はい、あなたは問題が本当にリリースの周りで起こっていると思います(私はこれがうまくいくかどうか尋ねたがっています)。実際にはリリース前のcocos2dに関連しています。私はCCActionを作成していますが、CCSprite * spを持っています。単に[sp runAction:anim]を実行しています。アニメーションが実行されている間、私はそれをリリースしていますが、アニメーションは視覚的に何も起こりませんが、それは正しいですか? – Asymptote
すべての実装方法によって異なります。所有権を取得するオブジェクトは、アニメーションを保持します。オブジェクトが所有権を取得しない場合、アニメーションは保持されません。 cocos2dドキュメントのオーナーシップルールを確認してください。それでも、メモリ管理の問題を引き起こす[競合状態](http://en.wikipedia.org/wiki/Race_condition)に陥る可能性があります(例えば、所有オブジェクトがオブジェクトを保持する前にアニメーションが1つのスレッドで解放される別のスレッド)。 – outis