私は大きな画像を子として追加するGameSceneを持っています。私はすべてのレベルのGameSceneを再作成したい。しかし、いくつかのレベルのゲームが終わると、メモリ警告を受信し、最終的にはクラッシュする。 deallocメソッドは決して呼び出されません。cocos2dシーンのdeallocがreplaceSceneの後で呼び出されない
MainSceneでスタート、ヒット 'スタート' ボタン - >
[[CCDirector sharedDirector] replaceScene: [GameScene scene]];
明確な、レベル>
[[CCDirector sharedDirector] replaceScene: [WinScene scene]];
ボタン - > '次へ'
[[CCDirector sharedDirector] replaceScene: [GameScene scene]];
を打ったとき
など... しかし、GameSceneのdeallocは決して起動されません。 (私はいけない、それが私のための一般的なアプローチであることから、それはGameSceneを保持instanceOfGameSceneだと思う:私は
static GameScene* instanceOfGameScene;
他の関連するメソッドを持ってGameSceneため
(MainSceneとWinSceneは大丈夫です) 。プログラムは、信号を受信して5秒後に、GameSceneのdeallocメソッドが最終的に、解雇されています、私の他のプロジェクトでOK)WinSceneで
-(id) init {
if ((self = [super init])) {
instanceOfGameScene = self;
etc...
-(void) dealloc {
CCLOG(@"game scene get dealloc'ed");
instanceOfGameScene = nil;
[super dealloc];
}
+(GameScene*) sharedScene
{
return instanceOfGameScene;
}
、私は[YES [GameScene sharedScene] removeAllChildrenWithCleanup]:実行するのです」 EXC_BAD_ACCESS "。最後の行に - (無効)removeAllChildrenWithCleanup:CCNodeクラスで(BOOL)クリーンアップ方法:その後、
ccArrayRemoveAllObjects(data);
です:
[children_ removeAllObjects];
スタックより深いエラーCCArray removeAllObjectsがある
/** Removes all objects from arr */
static inline void ccArrayRemoveAllObjects(ccArray *arr)
{
while(arr->num > 0)
[arr->arr[--arr->num] release];
}
これは絶対に共通です!シングルトンを使用することの大きな利点は、GameSceneを共有できるためです。 (ユニットテストの能力は失われますが) – OMGPOP
CCSceneを正しくプログラミングしていれば、CCSceneを共有する理由はありません。シングルトンアプローチを必要とするCCSceneを共有する必要があるいくつかの例は何ですか? –