2011-12-17 4 views
2

あまり読んだ後、私はシーンを置き換えるときに何をすべきか理解できないことが分かります。 deallocメソッドで 、私はすべての私のタイマーを解放する必要がありますか?またはcocos2dはそれをしますか?シーンを置き換えるときのタイマーとは?

私は起動時に3つのタイマーがあります。

[self schedule: @selector(contact:)]; 
[self schedule:@selector(tick:)]; 
[self schedule: @selector(randomsActions:) interval:0.1]; 

を私はメニュー(replaceScene)にシーンを交換befor私はこれを行う:

[self unschedule:@selector(randomsActions:)] ; //stop timer 
    [self unschedule:@selector(contact:)] ; //stop timer 
    [self unschedule:@selector(contact:)] ; //stop timer 

を、それがクラッシュ(私を言って人を見てきました。それらのスケジュールを解除する必要はありません)

だから、私はのdeallocでこれを試してみました:?

それはまた、2回目(クラスでのクラッシュ:CCScheduler.m)クラッシュ
[[CCScheduler sharedScheduler] unscheduleAllSelectorsForTarget: self]; 

私のdeallocで

が、私もこの:(を入れて、私は???する必要がありますか)

削除_contactListener;
[self removeAllChildrenWithCleanup: はい];
削除の世界;
world = NULL;
[super dealloc];

ここで何が起こりますか? シーンを置き換えるときにdeallocで何をすべきかについて誰かに教えてもらえますか? 私はタイマーで何をすべきですか?

ありがとうございました。

答えて

2

シーンを置き換えるとき、COCOS2dは特定のシーンまたはレイヤーに対して開始したすべてのスケジューラーを自動的にデアロップします。それはあなたが[self scheduler:...];と書いた理由です。 Cocos2dスケジューラはNSTimerと多少異なります。あなたが心配する必要はありません、ただ空白を維持scchedulerをDEALLOCする必要はありません

- (void)dealloc { 

    //memory deallocation 
[super dealloc]; 
} 
+0

私の主な問題は、私はシーンをゲームに戻って、メニューから行くことにしようとしていますときにクラッシュするということでした。 CCScheduler.mクラスの - (void)update:(ccTime)dtメソッドでクラッシュします。何故ですか ?それはタイマーに関係するものですか? – Curnelious

+0

CCSchedulerは、cocos2dの内部メカニズムによっても使用されています。あなたが他の部分で間違ったやり方をしていないことを確認してください。 – max9xs

関連する問題