1

サウンド ファイルの長さよりも短い短い時間だけサウンドを再生したいと考えています。そこで、プレイ開始と同時に音を止めるタスクをキューに入れておきたいと思います。

stop メソッドをキューに入れるには、NSTimer と performSelector:withObject:afterDelay の 2 つの選択肢があります。

2つのうちどちらが時間通りにトリガーされる可能性が最も高いか、または優先度が高いかを誰かが知っていますか? ミリ秒の精度で呼び出されることは必須ではありませんが、0.1 秒までの精度は素晴らしいでしょう。


補遺: さまざまなタイマーおよび遅延タスクの優先度に関するドキュメントがどこにあるか知っている人はいますか? たとえば、以下はどのようにランク付けされますか。

  • NSTimer タスク
  • 実行セレクター
  • setNeedsDisplay が呼び出された後のビューの drawRect の呼び出し
  • setNeedsDisplay が呼び出された後のレイヤーの描画ルーチンの呼び出し
  • その他の遅延タスク

そして、これを別のスレッドで実行しようとすると便利でしょうか?

4

3 に答える 3

2

performSelector:withObject:afterDelay:いつ発砲するかを知るためのタイマーを作成するので、両方のアプローチは等しく(信頼性が低い)はずです。コードがメインスレッドで高価な計算を実行し、実行ループに制御を戻さない場合、または実行ループが多くのイベントを処理する必要がある場合、タイマーは時間どおりに起動しません。

于 2009-11-17T13:36:07.923 に答える
1

NSTimer を用意しますが、サウンドが再生する時間間隔よりもはるかに短い時間間隔で行います。タイマーが起動すると、サウンドが再生されている間に数回発生し、開始してから経過した時間を数えます。その時間が設定したマージンを超えると、サウンドが停止します。

于 2009-11-17T12:05:41.133 に答える
0

私の理解では、それらはほとんど同じはずです。ただし、これを理解する最善の方法は、自分でテストすることです。一連のテストを実行して正確な時間を記録し、どちらが近いかを確認します。

于 2009-11-17T05:42:47.813 に答える