4

私は、イベントの時間を計るイベント タイマーを備えたアプリに取り組んでいます (当たり前!)。

かなり長い期間にわたってタイマーを使用して他のアプリを実行しましたが、これまでこの問題に遭遇したことはありません.

基本的に、何が起こっているかというと、アプリの起動時に でNSDate値を設定します[NSDate date]。次に、NSTimer定期的に起動し、現在の値と元の値を比較して経過時間をチェックするスケジュールされたオブジェクトがあります[NSDate date]

私の知る限り、これはこの種のことを行う正しい方法ですが、上記の段落に誤った仮定がある場合は修正してください。

とにかく、ここ数週間、新しい iPad でテストを行っているとき、さまざまな (そしてランダムに) システム時間がかなり前後しているように見える場所を数回見つけました。ある例では、時間が 64 秒も跳ね上がったようです。これは、タイマー ラベルに「00:03」と表示され、すぐに「01:08」と表示されたことを意味します (1 秒を正しく追加してから、64 を誤って追加します)!!! また、負のイベント期間が発生することもあります。

これは断続的に発生するため、基本的に次のようなことが可能かどうかを尋ねています。

  1. iOS 5.1 のバグ
  2. 新しい iPad 固有のハードウェアに関係するもの (iPad 第 1 世代、第 2 世代、いくつかの iPhone/iPod Touch バージョンなどではこの問題は発生していません...)
  3. 悪いコード (これが可能であることは認めますが、NSDate 値が NSDate 値以外になることはありません。このsingleton値が設定されているプロジェクト内のすべての場所を確認しました。

誰も似たような経験をしたことがありますか?誰でも助けることができますか?

4

1 に答える 1

3

これは iOS デバイスまたは OS バージョンのバグではありません。

あなたが見つけたように、NSDate APIは一貫性、または単調であることが保証されていません。それは(温度などに応じて)ドリフトし、セルラーまたはNTPソースから修正され、その後、日付と時刻の値がジャンプする可能性があります.

単調なローカル タイマーの場合は、 mach_time.h の関数を試すことができます。より良い絶対時間参照のために、アプリはネットワーク タイム ソースのポーリングを試すことができます。または、独自の時間関数を両方の組み合わせに結び付けることができます。

于 2012-05-03T19:21:42.593 に答える