2012-01-04 4 views
2

私は常に次のような状況で何が起こるか不思議に思っていましたcocos2dで簡単なXcodeプロジェクトを作成する場合:目的C、一度に1つの方法?

方法Aは、すべての0.01秒に予定されている

方法Bは、今1秒毎

を予定されていますメソッドBが大きなメソッドであり、計算に時間がかかるとします。それは方法Aによって中断されたことはありませんか?

つまり、別の方法が開始する前に、メソッドは常に完了しますか?

私はスレッドや何かを作成していません。

答えて

5

一般に、UIアプリケーションのUIスレッドで作業をスケジュールすると、特定の操作が開始されると、エラーを除いて中断されません。これは、iOSだけでなく、ほとんどのUIプラットフォームにも当てはまります。

システムは、ハードウェア割り込み(または受信したセル信号による割り込みなど)を処理するためにUIスレッドを中断することがありますが、これらの割り込みは(ほとんど)アプリケーションにとって透過的です。

しかし、自分の操作で決して中断されることはありません。

1

スレッドを使用していない場合、メソッドは中断することなく順番に実行されます。

2

これは、あなたが(つまり、あなたが実行するために2つのメソッドをスケジュールする際に一般的に行われている方法ごとに別々のスレッドを使用していない、あなたのメソッドと両方の方法をスケジュールするNSTimerが同じ実行ループで処理され、たとえば、使用されるだろうと仮定し独立して)。

Appleのサイト上NSTimerclass reference overview sectionから直接取得この引用:

タイマーの焼成時間が長いコールアウト中または実行ループは、タイマーを監視していないモードのときに発生した場合タイマーは、実行ループがタイマーを確認する次の時間まで、 を起動しません。 したがって、実際にタイマーが起動する実際の時刻は、予定されている発射時刻の後のかなりの時間である になる可能性があります。方法Bは、それらが同じ実行ループ上にあると仮定すると完了するまで、方法Aのポーリングメカニズム(例えばNSTimer)は発生しませんということである

。メソッドAは、メソッドBをセテごとに中断することはありませんが、そのタスクを完了することに依存しています。

メソッドAとメソッドBを独立したスレッドに配置する方法については、ここから始めてください:Grand Central Dispatch

関連する問題