0

私はコーディングに比較的慣れていないので、ループの n 回ごとの繰り返し (この場合は NSTimer の刻み) ごとにコードを実行する従来の方法があるかどうか疑問に思っています。

私は を使用しCADisplayLinkていますが、1 秒あたり 40 回、50 回など、何度でも更新されます。これらのループのすべて、たとえば 500 で何らかのコードを実行したい場合、標準的な方法はありますか? modulo演算子と を組み合わせて何かを作成できると思いintegerますが、新しいコーダーが知っておくべきより良い/より正規化された方法はありますか?

余分な明快さ(これはかなり一般的なことだと確信していますが..):1秒あたり60回刻むタイマーがありますが、10回の反復ごとに何かをしたいだけです。これを行うためにモジュロと整数を使用できることは既に知っていますが、このような状況を処理するための他の規則があるかどうかを知りたいです。

前もって感謝します!

4

1 に答える 1

0

適切な間隔の専用タイマーを設定します。

NSTimerまたはを使用しているかどうかに関係なく、CADisplayLink時間がかかりすぎる場合は、タイマー呼び出しを合体させてオフセットすることができます。実行に 20 フレームかかる表示リンクがある場合、毎秒 3 回しか呼び出されません (更新間隔が毎秒 60 フレームの場合)。また、1 つのインスタンスで実行に 2.5 秒以上かかるタイマーを毎秒実行するように設定している場合、次の反復を「食べて」しまい、次の反復の実行が 0.5 秒遅すぎます。

このため、タイマー呼び出しのみをカウントすると、タイマーが同期しなくなる可能性があります。ある間隔で繰り返し何かを行うには、タイマーをその間隔に設定することが絶対的な最良の近似です。

このような 2 番目のタイマーを使用しても、非常に多くのタイマーを使用しない限り、パフォーマンスの問題にはなりません。その場合は、1 つのティック タイマーで標準化し、特定の時点でイベントをスケジュールする必要があります (これは、以前の反復をカウントすることと同じではありません)。 .

于 2013-01-09T12:53:22.563 に答える