2010-11-27 8 views
2

私はNSTimerを実行しても信頼性の高い結果を得るのに最も速いのは何ですか?私は30msに近づくにつれてそれが役に立たなくなることを読みました。それで、どこが「無駄になって始めるのですか」... 40ms? 50ms?NSTimerを実行するのが最も速いのは何ですか?

+0

高速実行、繰り返し、タイマーは避ける必要があります。彼らはバッターを消費し、アプリケーションを応答しないままにする傾向があります。 – bbum

+0

[NSTimerを高い頻度で使用する]の複製が可能ですか?(0120-18753-03) –

+0

@bbum "高速実行、繰り返しタイマーは避けるべきです"...あなたはNSTimerのインスタンスを指していますか、あるいは設計上の問題ですか?また、NSTimerに代わるより速い方法がありますか? MIDIをプッシュアウトするためにCADisplayLink 60fpsよりも速く進む必要があります。 –

答えて

4

セイthe docs

タイマーの時間 間隔の有効解像度が 上に制限されているあなたがしたい場合は50-100ミリ秒

の順序は以下のように聞こえます0.1秒以下のタイマーは使用しないでください。しかし、あなた自身のアプリでそれを試してみて、あなたがいかに低いことができるか見てみませんか?

これについては保証がありません。 NSTimersは事実上日和見的ですが、イベントループを実行するので、効果的な細分性は、Cocoaタイマーのディスパッチメカニズムの限界に加えて、アプリ内で実行されるすべてのものに依存します。

+0

ありがとうございます。私自身がGCDを使って書くのとは別に、これよりも速く進めるための推奨方法はありますか? –

+1

@DanRosenstark(6年後...)あなたが必要とするものによって異なります。 'CADisplayLink'は60分の1秒になるかもしれないようだが、これはディスプレイのタイミングの周りにいくつかの注意点があるからだ。リアルタイム性や超高精度を保証するものが必要な場合は、最善のアプローチ方法について新しい質問をする必要があります。がんばろう! –

1

達成しようとしている結果の種類によって異なります。 NSTimer Class0.5 - 1.0は、信頼性の高い結果を得るのに適しています。

2

信頼性の高い定義は何ですか? 1秒タイマーの16mSエラーは2%エラーですが、30mSタイマーは50%エラーです。

NSTimersは、現在の実行ループで何が起きても終了するのを待って、時間内のエラーが蓄積する可能性があります。例えばディスプレイにN回タッチすると、その後に繰り返されるNSTimerのすべての点滅は、0からNまでのハンドラ(「間違った」時間に実行していたもの)に触れる累積時間によって遅くなることがあります。

CADisplayLinkタイマーは、フォアグラウンドタスクのセットがフレーム時間と同じ時間かかると仮定して、フレームレートまでの時間を量子化しようとします。

関連する問題